Powershell: ์ œ์•ˆ: ์‚ผํ•ญ ์กฐ๊ฑด๋ฌธ ๊ตฌํ˜„

์— ๋งŒ๋“  2017๋…„ 03์›” 02์ผ  ยท  52์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PowerShell/PowerShell

C ์Šคํƒ€์ผ ์‚ผํ•ญ ์กฐ๊ฑด๋ฌธ์€ ์–ธ์–ด์— ํŽธ๋ฆฌํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์ž‘์„ฑํ•˜๋Š” ๋Œ€์‹ :

if ((get-date).tostring("ss") % 2) { 'odd'  } else  { 'even' }

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(get-date).tostring("ss") % 2   ?   'odd'   :    'even'

๋˜ํ•œ ์˜ค๋žœ ์‹ค๋ง์„ ๋œ์–ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Microsoft์—์„œ "๋ฐฐ์†ก์€ ์„ ํƒํ•˜๋Š” ๊ฒƒ"์ž…๋‹ˆ๋‹ค. V1.0์—์„œ ์ถœ์‹œํ•  ์ˆ˜ ์—†์–ด ๋งค์šฐ ์‹ค๋งํ–ˆ๋˜ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.

2006๋…„ 12์›” 29์ผ์ž PowerShell ํŒ€ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ .


๊ด€๋ จ ํ•ญ๋ชฉ: null-coalescence ๋ฐ null-soaking ๋ฐ null-์กฐ๊ฑด๋ถ€ ํ• ๋‹น ๊ตฌํ˜„

Committee-Reviewed Issue-Enhancement WG-Language

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@RichardSiddaway : 2014๋…„๋ถ€ํ„ฐ _asked๋œ PowerShell ํƒœ๊ทธ ์งˆ๋ฌธ์—์„œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค(์ด ๊ธ€์„ ์“ฐ๋Š” ์‹œ์  ๊ธฐ์ค€).

$PSItem ๋Š” 2012๋…„ 9์›” v3์— ๋„์ž…๋˜์—ˆ์œผ๋ฏ€๋กœ ์•ˆ์ „์„ ์œ„ํ•ด ์ฟผ๋ฆฌ ์‹œ์ž‘ ๋‚ ์งœ๋กœ 2014๋…„์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •ํ™•ํ•œ ์ธก์ •ํ•ญ๋ชฉ์€ ์•„๋‹ˆ์ง€๋งŒ - ์‚ฌ์ดํŠธ์—์„œ๋Š” $_ ๋˜๋Š” _ ๋Œ€ํ•œ ๊ฒ€์ƒ‰์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ถˆํ–‰ํžˆ๋„ $_ ๋ฅผ ํฌํ•จํ•˜๋Š” ์งˆ๋ฌธ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. $PSItem , v3 ์ด์ „ ์งˆ๋ฌธ์ด ์—ฌ์ „ํžˆ ์ œ๊ธฐ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ $_ ๊ฐ€ $PSItem ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋” ํฐ ์š”์ ์€ _์„ ํƒ_ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$PSItem ์™€ $_ ํ–‰๋ณตํ•˜๊ฒŒ ๊ณต์กดํ•˜๋“ฏ์ด ForEach-Object ์™€ % , Where-Object , ? , .. .:

$a ? $b : $c ๋Š” if ($a) { $b } else { $c } / $(if ($a) { $b } else { $c }) ์™€ ๊ณต์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$a ? $b : $c ๋ฅผ ์†Œ๊ฐœํ•˜๋Š” _๊ธ์ •์ ์ธ_ ์ด์œ ๋ฅผ ์š”์•ฝํ•˜์ž๋ฉด

  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์นœ์ˆ™ํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ๋œ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

  • $(...) ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. if ๋ฌธ์ด ๋” ํฐ ํ‘œํ˜„์‹(์ด๋Š” ๋” ์‹œ๋„๋Ÿฝ๊ณ  ๋œ ํšจ์œจ์ ์ด๋ฉฐ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ธก๋ฉด์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ)

๋ถˆ๋ถ„๋ช…ํ•œ ๋ฌธ์ œ์— ๊ด€ํ•ด์„œ:

(๋‹จ์ˆœํ•œ) ์ธ์ˆ˜๋กœ _๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋Œ€์กฐ์ ์œผ๋กœ _ํ‘œํ˜„์‹_์„ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•ฝ๊ฐ„์˜ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚ด (์ผํ™”์ ์ธ) ๊ฐ๊ฐ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์†Œํ•œ $a ? $b : $c ๋ฅผ if ๋กœ _recognize_ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ์‰ฝ๊ฒŒ ์„ค๋ช…๋˜๋ฉฐ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ _symbols_ ์‚ฌ์šฉ์„ ์ œ์™ธํ•˜๊ณ  ๊ฐœ๋…์  ๋ณต์žก์„ฑ์€ if ($a) { $b } else { $c } ์˜ ๊ฐœ๋… ๋ณต์žก์„ฑ๊ณผ ๋™์ผํ•˜๋ฉฐ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค.
$(if ($a) { $b } else { $c })

ํ•œ ๋ฒˆ ์†Œ๊ฐœ๋˜๋ฉด ์ธ๊ธฐ๋ฅผ ์–ป๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด - ํ™•์‹คํžˆ, ์ด ๋…ผ์˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค - ์ž์ฃผ ๋งˆ์ฃผํ•˜๋ฉด ์นœ์ˆ™ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€์šฉ๊ตฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฆ‰, ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ž…๋ ฅํ•˜๊ธฐ ์‰ฝ๊ณ  ์ ์–ด๋„ ๋‚˜์™€ ๋ช‡๋ช‡ ๋‹ค๋ฅธ ์—ฌ๊ธฐ, ๋” ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค) - ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด $PSItem ๋ณด๋‹ค $_ ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  52 ๋Œ“๊ธ€

๋ช…๋ น๋ฌธ์—์„œ ํ• ๋‹น์„ ํ—ˆ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝํ•˜๋ฉด ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์˜ ํ•„์š”์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹จ์ˆœํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
$var = if ($x) { $x } else { $y }
์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋งŒํผ ๊ฐ„๊ฒฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํ‹€๋ฆผ์—†์ด ๋” ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์กฐ๊ฑด์ด ๋” ํฐ ํ‘œํ˜„์‹์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ $(...) _in ์ถ”๊ฐ€_ ์‚ฌ์šฉํ•ด์•ผ ํ•˜์ง€๋งŒ:

'The current sec. is ' + $(if ((get-date).tostring("ss") % 2) { 'odd'  } else  { 'even' })

๋Œ€

powershell 'The current sec. is ' + ((get-date).tostring("ss") % 2 ? 'odd' : 'even')

๋‚˜๋Š” ๊ฐ€๋…์„ฑ์ด ... ์–ด ... ๋…์ž์˜ ๋ˆˆ์— ๋‹ฌ๋ ค ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ํ›„์ž๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ธฐ ๋” ์‰ฝ๊ณ  ๋œ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ๋ณด๋„ˆ์Šค๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ถ”์ƒ์ ์ธ ์‚ผํ•ญ ๊ตฌ๋ฌธ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ„์† if ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ).

@mklement0 ๋‚˜์ค‘์— ์ธ์ง€ ๋ถ€ํ•˜๊ฐ€ โ€‹โ€‹์ ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ™•์‹คํžˆ ๋‚ด ์ƒ์œ„ ๋ชฉ๋ก์— ์žˆ์Šต๋‹ˆ๋‹ค.
@BrucePay , ์ด๊ฒƒ์ด ๋‚˜์œ ์ƒ๊ฐ์ด ๋  ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด '๋ฐฐ์†ก์€ ์„ ํƒํ•˜๋Š” ๊ฒƒ'์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๊ณผ๊ฑฐ์— ์ด ๊ธฐ๋Šฅ ์š”์ฒญ์€ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•œ ์Šคํฌ๋ฆฝํ„ฐ๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ณ  if ๋ฌธ์˜ ํ‘œํ˜„ ํ˜•์‹์ด ๋” ์žฅํ™ฉํ•˜์ง€๋งŒ ๋” ๋ช…ํ™•ํ•˜๋‹ค๋Š” ์ด์œ ๋กœ ๊ฑฐ์ ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฐœ์ธ์ ์ธ ๊ด€์ : ์–ธ์–ด๊ฐ€ ๋‚˜๋งŒ์„ ์œ„ํ•œ ๊ฒƒ์ด๋ผ๋ฉด ์•„๋งˆ ์˜ค๋ž˜ ์ „์— ์ถ”๊ฐ€ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ... ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋“ค์ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ด๋Š” ์‹ค์ œ๋กœ ๊ฒฝํ—˜์ด ์ ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์— ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์„ค์— ์•ฝ๊ฐ„์˜ ์ง„์‹ค์ด ์žˆ์Œ์„ ์‹œ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@lzybkr :

๊ธฐ๋Šฅ์˜ _์ ๊ทน์  ์‚ฌ์šฉ_๊ณผ ๊ธฐ๋Šฅ์„ _์ธ์ง€ํ•˜๊ณ  ์ดํ•ดํ•˜๋Š” ๋Šฅ๋ ฅ์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ "๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค"๋Š” ๊ฒƒ์€ ๊ฒฝํ—˜์ด ์ ์€ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ์—์„œ ๊ทธ๊ฒƒ์„ ๋ณผ ๋•Œ _์ดํ•ดํ•˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ?

@mklement0 - $_ ๊ฐ€ ์• ๋งคํ•˜๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๋Š” ์ถฉ๋ถ„ํ•œ ํ”ผ๋“œ๋ฐฑ ๋•Œ๋ฌธ์— $psitem ๋ฅผ $_ ์˜ ๋ณ„์นญ์œผ๋กœ ๋„์ž… $psitem ๊ฒฝํ—˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— PowerShell์—๋Š” ์ดˆ๋ณด์ž๋‚˜ ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋„ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์š”์†Œ๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ธ์–ด ๊ตฌ์„ฑ์˜ ๊ตฌ๋ฌธ๊ณผ ์˜๋ฏธ๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์‚ผํ•ญ ์—ฐ์‚ฐ์ž๊ฐ€ ํŠนํžˆ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ผ๊ณ  ์•”์‹œํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์œ ์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ผํ™”์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋น„ํŒ์€ bash, perl ๋“ฑ์˜ ๋ชจ๋“  ์•”ํ˜ธ ์–ธ์–ด์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ถ„๋ช…ํžˆ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด ์ €๋Š” ์—ญ์‚ฌ์  ๋งฅ๋ฝ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ PowerShell์€ ์ด์ œ ๋” ๋ณต์žกํ•œ ๊ตฌ๋ฌธ์ด ์ฑ„ํƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์œ ๋น„์ฟผํ„ฐ์Šค์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ผ๋ถ€ ๊ฐ„๊ฒฐํ•œ ์–ธ์–ด๋Š” ์—ฌ์ „ํžˆ if/then์„ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: F#).

์ฆ‰, ๋” ์ ์€ ์ˆ˜์˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋„ˆ๋ฌด ๋ชจํ˜ธํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

if ($x) { $y } else { $z }
$x -then $y -else $z
$x ? $y : $z

-then/-else ๋Š” PowerShell ๊ตฌ๋ฌธ๊ณผ ์ž˜ ๋งž์ง€๋งŒ ์—ฐ์‚ฐ์ž(๋˜๋Š” ๋‹จ์ผ ์—ฐ์‚ฐ์ž๋กœ ์ƒ๊ฐํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ ์—ฐ์‚ฐ์ž)๋Š” ๊ด„ํ˜ธ์™€ ์ค‘๊ด„ํ˜ธ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ด์ ์„ ์–ป์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์‹œ foreach ๋Œ€ foreach-object ์™€ ์œ ์‚ฌํ•œ ๋ฌธ์ œ๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด์ฉŒ๋ฉด ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€๋Š” ์•Š์€์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@lzybkr :

๋™์ข… ์š”๋ฒ• ์šฉ๋Ÿ‰์˜ ๋น„๋ฐ€์€ ๊ฑด๊ฐ•ํ•ฉ๋‹ˆ๋‹ค.

PowerShell์€ ์ „๋ฐ˜์ ์œผ๋กœ ํ›Œ๋ฅญํ•˜์ง€ ์•Š์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” _์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š”_ ๊ตฌ๋ฌธ, ํŠนํžˆ Where-Object ๋ฐ % ? ๋Œ€ํ•ด ๊ฐ„๊ฒฐํ•œ _๋Œ€์ฒด_(์›ํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ ์žฅํ™ฉํ•  ์ˆ˜ ์žˆ์Œ)๋กœ ์•”ํ˜ธ ๊ตฌ๋ฌธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค % ForEach-Object .

$x ? $y : $z ์— ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•œ ๋Œ€์•ˆ์œผ๋กœ if ($x) then { $y } else { $z } ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ์ •์‹ ์ž…๋‹ˆ๋‹ค.

? ์ด _question_์„ ์—ฐ์ƒ์‹œํ‚ค๋ฏ€๋กœ ์กฐ๊ฑด๋ถ€(์ด ๊ฒฝ์šฐ ? ๊ฐ€

$x -then $y -else $z ๋™์ผํ•œ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ต์ˆ™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋งŽ์€ PS ์—ฐ์‚ฐ์ž์—๋Š” ๊ธฐํ˜ธ ์ด๋ฆ„์ด ์žˆ์ง€๋งŒ ๋งŽ์€ ์—ฐ์‚ฐ์ž๋Š” ์—†์Šต๋‹ˆ๋‹ค. * / + % ...
์ด๊ฒƒ๋“ค๋„ ๋ณธ์งˆ์ ์œผ๋กœ ๋น„๋ฐ€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์„ ๋” ์ด์ƒ ๊ทธ๋ ‡๊ฒŒ ์ธ์‹ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ๋“ค์€ ๋„ˆ๋ฌด๋‚˜ ์นœ์ˆ™ํ•˜๊ณ  ์–ด๋””์—๋‚˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— $x ? $y : $z ์—ญ์‹œ ์ด๋ฏธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•˜๊ณ  ๊ฐ„๊ฒฐํ•œ ์กฐ๊ฑด๋ฌธ์— ๋Œ€ํ•œ ๋นˆ๋ฒˆํ•œ ํ•„์š”์„ฑ์„ ๊ฐ์•ˆํ•  ๋•Œ ์–ธ์–ด์— ๋„์ž…๋˜๋ฉด ๋”์šฑ ๊ทธ๋Ÿด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ์—ฐ์‚ฐ์ž๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์ด ์ƒ๋‹นํžˆ ์ œํ•œ์ ์ด๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ํŠนํžˆ ๊ด„ํ˜ธ๋กœ ๋ฌถ์ง€ ์•Š๋Š” ํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

(test-path foo.txt) ? (get-content foo.txt) : (get-content bar.txt)

์— ๋น„ํ•ด

if (test-path foo.txt) {get-content foo.txt} else {get-content bar.txt}

๋˜๋Š”

get-content ((test-path foo.txt) ? "foo.txt" : "bar.txt")

๋Œ€

get-content $(if (test-path foo.txt) {"foo.txt"} else {"bar.txt"})

์ œ ์ƒ๊ฐ์—๋Š” ๊ฐ„๊ฒฐ์„ฑ ๋ฉด์—์„œ ์žฅ์ ์ด ๊ฑฐ์˜ ์—†๊ณ  ๊ฐ€๋…์„ฑ ๋ฉด์—์„œ ๋šœ๋ ทํ•œ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œํ˜„ ์ง€ํ–ฅ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ํ›จ์”ฌ ๋œ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. 16๋…„ ์ „์— ์–ธ์–ด๋ฅผ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ C ๋ฐฐ๊ฒฝ์—์„œ ๋‚˜์˜จ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์•„ ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ง€์ €๋ถ„ํ•œ ๋Š๋‚Œ์ž…๋‹ˆ๋‹ค.

ํŠนํžˆ ๊ด„ํ˜ธ๋กœ ๋ฌถ์ง€ ์•Š๋Š” ํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Š” _any_ PowerShell ์—ฐ์‚ฐ์ž์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  PowerShell ๋ฌธ์— ๋ช…๋ น์ด ํฌํ•จ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” (...) ๊ฐ€ ๋ช…๋ น์— ๋Œ€ํ•œ ์ž…์žฅ๋ฃŒ(๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ)์ž„์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์‹ ์˜ ์˜ˆ์—์„œ, ๋‚˜์—๊ฒŒ ((test-path foo.txt) ? "foo.txt" : "bar.txt") ๋›ฐ๋Š” $(if (test-path foo.txt) {"foo.txt"} else {"bar.txt"}) ํ•„์š”์˜ ๋ฌด๋ช…์„ ์œ„ํ•ด, ๋ชจ๋‘ $(...) ์ค‘๊ด„ํ˜ธ์— ์˜ํ•ด ๋„์ž… ๋œ ์†Œ์Œ.

์ €๋งŒ ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ €๋Š” ์ด๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

get-content ((test-path foo.txt) ? "foo.txt" : "bar.txt")

์ด๋ณด๋‹ค ์‹œ๊ฐ์ ์œผ๋กœ ์Šค์บ”/๋ถ„์„ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค .

get-content $(if (test-path foo.txt) {"foo.txt"} else {"bar.txt"})

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‚˜์˜ ์œ ์ผํ•œ ๋ถˆ๋งŒ์€ ์‚ผํ•ญ ?: ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ null-coalescing ?? ๋„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$logDir = $env:LogDir ?? "$PSScriptRoot\Log"

๋‚˜๋Š” ์•ผ์ƒ์—์„œ ๋งŽ์€ Invoke-Ternary ๋ฐ Invoke-NullCoalescing ๊ตฌํ˜„์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค(์˜ˆ: https://github.com/dahlbyk/posh-git/blob/master/src/Utils.ps1#L12). ๊ทธ๋Ÿฌํ•œ ์ข…๋ฅ˜๋Š” ์–ธ์–ด์— ๊ตฌ์šด ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์š•๊ตฌ๊ฐ€ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

@rkeithhill : ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. re null-coalescing: ์ด๋ฏธ null-soaking์„ ๋‹ค๋ฃจ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. #3240

๋”ฐ๋ผ์„œ ๊ฒฝํ—˜์ด ์ ์€ ์ฝ”๋”์˜ ์ฃผ์žฅ์€ null-coalescing ๋˜๋Š” ์‚ผํ•ญ ์ฝ”๋“œ ๋ฌธ์„ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ "๊ณ ๊ธ‰" ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ์—†์œผ๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ฒฝํ—˜์ด ๋ถ€์กฑํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๋‹ค๋ฉด ๊ฐœ์ธ์ ์œผ๋กœ ๊ทธ๊ฒƒ์ด ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์ •๋ง ๋นจ๋ฆฌ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๋Š” ์‹ ํ˜ธ์ž…๋‹ˆ๋‹ค.
C#์—์„œ ์‚ผํ•ญ์„ ์ฒ˜์Œ ๋ณด์•˜์„ ๋•Œ ๋‚˜๋Š” WTF๊ฐ€ MS๊ฐ€ ๋„์ž…ํ•œ ์ด ์ƒˆ๋กœ์šด ์ง€์˜ฅ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋‚ด์šฉ์„ ์ฝ๋Š” ๋ฐ ๋ช‡ ๋ถ„ ์ •๋„ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ํ‘น ๋น ์ ธ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

POSH์˜ ์‹ค์ œ ์˜ˆ์—๋Š” ๋‹ค์Œ ์ค„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
$mc_object = ($Message.fields | where Name -Match appname).Content
$Message ๊ฐ์ฒด์— "app name"์ด๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ ์†์„ฑ์ด ์—†์„ ๋•Œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ›Œ๋ฅญํ•˜๊ณ  ๋ฉ‹์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  JSON ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์–ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์—‡์„ ํ•ด์•ผ ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ null-coalesce ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด ์›๋ž˜ setter๊ฐ€ null์ธ ๊ฒฝ์šฐ์—๋„ $mc_object๊ฐ€ ํ•ญ์ƒ ์œ ํšจํ•œ ๋ฌธ์ž์—ด์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋์— ?? "" ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ
$mc_object = if(-not ($Message.fields | where Name -Match appname).Content)){""}else{($Message.fields | where Name -Match appname).Content}
๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋งค์šฐ ์ฝ์„ ์ˆ˜ ์—†์ง€๋งŒ, ๋‚ด๊ฐ€ ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ผ์„ ํ•จ์œผ๋กœ์จ ์ด๊ฒƒ์„ ์กฐ๊ธˆ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
$mc_object = ($Message.fields | where Name -Match appname).Content if(-not $mc_object){$mc_object = ""}

๋”์ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ null-coelase๋ฅผ ์œ„ํ•ด 4๊ฐœ ์ด์ƒ์˜ ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ๋‚˜๋Š” Powershell์—์„œ ์‚ผํ•ญ ๋ฐ null-coelase์— ํ™•์‹คํžˆ ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ช‡ ๊ฐ€์ง€ ๋งค์šฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ณ  Powershell์„ ๋ชจ๋“  ์‹œ์Šคํ…œ์—์„œ "์ฝ”์–ด" ํ˜•์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋” ๋งค๋ ฅ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

@lzybkr ์‹ค์ œ๋กœ $PSItem ์ฑ„ํƒํ•œ ์‚ฌ๋žŒ์„ ์•„์ง ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฝค ํฐ ๊ทœ๋ชจ์˜ ํŒ€์—์„œ ์ผํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ฒฝํ—˜์ด ๋œํ•œ PowerShell ์‚ฌ์šฉ์ž๋ผ๋„ ์—ฌ์ „ํžˆ ๋ชจ๋‘ $_ ํ•ฉ๋‹ˆ๋‹ค.

@tibmeister ๋˜๋Š” ....

if (-not ($mc_object = $Message.fields.where{$_.Name -match 'appname'}.Content)) {
    $mc_object = ''
}

ํ‘œํ˜„์‹์œผ๋กœ์„œ์˜ ํ• ๋‹น์€ ํ†ต๊ณผํ•˜์ง€๋งŒ ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ •๊ธฐ์ ์œผ๋กœ $psitem์„ ์‚ฌ์šฉํ•œ๋‹ค

์ˆ˜๋…„์— ๊ฑธ์ณ Scripting Games $psitem์ด ๋‹ต๋ณ€์— ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@RichardSiddaway : 2014๋…„๋ถ€ํ„ฐ _asked๋œ PowerShell ํƒœ๊ทธ ์งˆ๋ฌธ์—์„œ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ๋ฅผ ๋ณด๋ฉด ๋‹ค์Œ์„ ์–ป์Šต๋‹ˆ๋‹ค(์ด ๊ธ€์„ ์“ฐ๋Š” ์‹œ์  ๊ธฐ์ค€).

$PSItem ๋Š” 2012๋…„ 9์›” v3์— ๋„์ž…๋˜์—ˆ์œผ๋ฏ€๋กœ ์•ˆ์ „์„ ์œ„ํ•ด ์ฟผ๋ฆฌ ์‹œ์ž‘ ๋‚ ์งœ๋กœ 2014๋…„์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •ํ™•ํ•œ ์ธก์ •ํ•ญ๋ชฉ์€ ์•„๋‹ˆ์ง€๋งŒ - ์‚ฌ์ดํŠธ์—์„œ๋Š” $_ ๋˜๋Š” _ ๋Œ€ํ•œ ๊ฒ€์ƒ‰์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋ถˆํ–‰ํžˆ๋„ $_ ๋ฅผ ํฌํ•จํ•˜๋Š” ์งˆ๋ฌธ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. $PSItem , v3 ์ด์ „ ์งˆ๋ฌธ์ด ์—ฌ์ „ํžˆ ์ œ๊ธฐ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ $_ ๊ฐ€ $PSItem ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋” ํฐ ์š”์ ์€ _์„ ํƒ_ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$PSItem ์™€ $_ ํ–‰๋ณตํ•˜๊ฒŒ ๊ณต์กดํ•˜๋“ฏ์ด ForEach-Object ์™€ % , Where-Object , ? , .. .:

$a ? $b : $c ๋Š” if ($a) { $b } else { $c } / $(if ($a) { $b } else { $c }) ์™€ ๊ณต์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$a ? $b : $c ๋ฅผ ์†Œ๊ฐœํ•˜๋Š” _๊ธ์ •์ ์ธ_ ์ด์œ ๋ฅผ ์š”์•ฝํ•˜์ž๋ฉด

  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์นœ์ˆ™ํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ๋œ ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

  • $(...) ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋” ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. if ๋ฌธ์ด ๋” ํฐ ํ‘œํ˜„์‹(์ด๋Š” ๋” ์‹œ๋„๋Ÿฝ๊ณ  ๋œ ํšจ์œจ์ ์ด๋ฉฐ ์˜๋„ํ•˜์ง€ ์•Š์€ ์ธก๋ฉด์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ)

๋ถˆ๋ถ„๋ช…ํ•œ ๋ฌธ์ œ์— ๊ด€ํ•ด์„œ:

(๋‹จ์ˆœํ•œ) ์ธ์ˆ˜๋กœ _๋ช…๋ น์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋Œ€์กฐ์ ์œผ๋กœ _ํ‘œํ˜„์‹_์„ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ์€ ์•ฝ๊ฐ„์˜ ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‚ด (์ผํ™”์ ์ธ) ๊ฐ๊ฐ์€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ตœ์†Œํ•œ $a ? $b : $c ๋ฅผ if ๋กœ _recognize_ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋„ ์‰ฝ๊ฒŒ ์„ค๋ช…๋˜๋ฉฐ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ _symbols_ ์‚ฌ์šฉ์„ ์ œ์™ธํ•˜๊ณ  ๊ฐœ๋…์  ๋ณต์žก์„ฑ์€ if ($a) { $b } else { $c } ์˜ ๊ฐœ๋… ๋ณต์žก์„ฑ๊ณผ ๋™์ผํ•˜๋ฉฐ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค.
$(if ($a) { $b } else { $c })

ํ•œ ๋ฒˆ ์†Œ๊ฐœ๋˜๋ฉด ์ธ๊ธฐ๋ฅผ ์–ป๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด - ํ™•์‹คํžˆ, ์ด ๋…ผ์˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค - ์ž์ฃผ ๋งˆ์ฃผํ•˜๋ฉด ์นœ์ˆ™ํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€์šฉ๊ตฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฆ‰, ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ž…๋ ฅํ•˜๊ธฐ ์‰ฝ๊ณ  ์ ์–ด๋„ ๋‚˜์™€ ๋ช‡๋ช‡ ๋‹ค๋ฅธ ์—ฌ๊ธฐ, ๋” ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค) - ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด $PSItem ๋ณด๋‹ค $_ ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

mklement0, ๋‹น์‹ ์€ ๋งค์šฐ ๋ฉ‹์ง„ ์˜ˆ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์š”์ ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋‹ค์‹œ ์ฝ๊ณ  ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์„ ์‚ดํŽด๋ณด๋ฉด ์ œ์•ˆ๋œ ์•ฝ๊ฐ„ ๋” ์žฅํ™ฉํ•œ ๊ตฌ๋ฌธ์— ๋” ๋งŽ์ด ๊ธฐ์šธ๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$value = $a -eq $b -then $trueVal -else $falseval

๋˜๋Š” ๋” ์˜๋ฏธ๋ก ์ ์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ:

$value = $trueVal -if $a -eq $b -else $falseVal

@vexx32 ์ฒซ ๋ฒˆ์งธ ์˜ˆ๋Š” ์ƒ๊ด€์—†์ง€๋งŒ ํ‘œํ˜„์‹ ์ค‘๊ฐ„์— ์žˆ๋Š” ์กฐ๊ฑด์ด ๋งค์šฐ ๋ฌด๊ฒ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜, ๋‚ด๊ฐ€ ๋™์˜ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋” ... ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์•ฝ๊ฐ„ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ฒซ ๋ฒˆ์งธ๋กœ ๊ฐ€๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

PowerShell์ด โ€‹โ€‹C#์— ๋Œ€ํ•œ "์˜จ ๋žจํ”„" ์–ธ์–ด๊ฐ€ ๋˜๋„๋ก ์˜๋„๋˜์—ˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ? : ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. JavaScript๋„ ์ด ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์š”์ฆ˜ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ์–ธ์–ด ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. :-)

@rkeithhill , ๋‘˜ ๋‹ค ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์นœ์ˆ™ํ•จ๊ณผ _ ๊ทธ๋ฆฌ๊ณ _ C#์—์„œ๋„ ? ๊ธฐ๋ฐ˜ ์ธ null ๋ณ‘ํ•ฉ, null-soaking ๋ฐ null-์กฐ๊ฑด๋ถ€ ํ• ๋‹น์„ ์›ํ•˜๋Š” ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

ํ›„์ž์˜ ๋‘ ๊ฐœ(์˜ˆ: $foo?.bar ๋ฐ $var ?= 'default val' ๋Š” ๊ธฐํ˜ธ ๊ธฐ๋ฐ˜ ํ‘œํ˜„ ์—†์ด๋Š” ์‹ค์ œ๋กœ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ null ๋ณ‘ํ•ฉ์˜ ๊ฒฝ์šฐ์—๋„ $a ?? 'value-if-null' $a -elseifnull 'value-if-null' ์™€ ๊ฐ™์€ ๊ฒƒ๋ณด๋‹ค ์„ ํ˜ธ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

? ์— ๋Œ€ํ•ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ณ„์นญ์ธ Where-Object ๋Š” ์ด๋ฏธ _์กฐ๊ฑด๋ถ€_๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ํ™•๊ณ ํ•˜๊ฒŒ ์ž๋ฆฌ ์žก์•˜์œผ๋ฏ€๋กœ ํ•ด๋‹น ์ง€์‹์„ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ์ด์ „ํ•˜๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

PowerShell์€ ์ •๋ง C#์œผ๋กœ ๊ฐ€๋Š” ์ง„์ž…๋กœ์ธ๊ฐ€์š”? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด 10-12๋…„ ์ „์— ๋ช…์‹œ๋œ ์˜๋„์˜€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์ผ์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์˜์‹ฌ์€ ๋Œ€๋‹ค์ˆ˜์˜ PowerShell ์‚ฌ์šฉ์ž์—๊ฒŒ C#์ด ๊ฐ€๊ณ  ์‹ถ์€ ๊ณณ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ผํ•ญ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
$value = $trueVal -if $a -eq $b -else $falseVal

@vexx32๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด

์ผ๋ฐ˜ PowerShell ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

@mklement0 $psitem์— ๋Œ€ํ•œ ๋‚ด ์˜๊ฒฌ์€ ๋‚ด ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝํ—˜์„ ํ•œ ๊ฒฝ์šฐ ๋‚ด ๊ฒฝํ—˜์ด ๋ฌดํšจํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด 10-12๋…„ ์ „์— ๋ช…์‹œ๋œ ์˜๋„์˜€๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, Jeffrey๊ฐ€ ๋‹ค๋ฅธ ์žฅ์†Œ๋“ค ์‚ฌ์ด์—์„œ ์ดˆ๊ธฐ MVP ์ •์ƒ ํšŒ๋‹ด์—์„œ. ๋‚˜๋Š” ๊ทธ ์ดํ›„๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋“ฃ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ์กฐ๊ฑด๋ถ€/๋ฃจํ”„ ๊ตฌ๋ฌธ์€ C#(๋ฐ C ๊ณ„๋ณด), if {} , while {} , do {} while , ์Šค์œ„์น˜ {} , ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค while {} {} , foreach {} , {} catch {} finally {}`๋ฅผ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด๋ถ€ ๊ตฌ์„ฑ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ @rkeithhill์ด๋ผ๋Š” ์–ธ์–ด ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž๋Š” ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

PowerShell์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„ ์˜ ์—ฐ์‚ฐ์ž๋Š” C#์— ํ•ด๋‹นํ•˜๋Š” ์—ฐ์‚ฐ์ž์™€ ์ƒ๋‹นํžˆ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์‹ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. PS ํŒ€์€ ๋Œ€๋ถ€๋ถ„์˜ ์šด์˜์ž๋ฅผ ์œ„ํ•ด ๋” ์„ค๋ช…์ ์ธ ๊ตฌ๋ฌธ์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ผํ•ญ ํ–‰๋™๋„ ์‚ฌ์šฉํ•  ๊ตฌ๋ฌธ ์˜ต์…˜ ์ž์„ธํ•œ ๋” ์ดํ›„์—ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. PowerShell์€ C#์— ๋Œ€ํ•œ '์˜จ ๋žจํ”„(on-ramp)'๋กœ ์ธ์‹๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ๋” ์ƒ์ง•์ ์ธ ๊ตฌ๋ฌธ์„ ์ƒ์†ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ฐธ์œผ๋กœ ์• ์จ ํ”ผํ•œ ๊ณณ์ด ๋งŽ๋‹ค.

๊ธฐํ˜ธ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ธ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ฐ€ ์ด ๊ฐœ๋…์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๋Œ€์‹  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์„ค๋ช…์ ์ธ ๊ตฌ๋ฌธ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ C#์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ๊ตฌ๋ฌธ์— ์ต์ˆ™ํ•˜๋‹ค๊ณ  ํ•ด์„œ ํ™•์‹คํžˆ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”

PowerShell์„ C # ๋˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋กœ '์ง„์ž…๋กœ'์–ธ์–ด์˜ ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ๊ฐ€์žฅ ๋‚ฎ์€ ๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ๊ฐ€์žฅ ๋ฏธ์ˆ™ ํ•œ ์‚ฌ๋žŒ์ด ์ฐพ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ๋ฌด์Šจ ์ƒ๊ฐํ•ด์•ผ (I ๋Š๋‚Œ, ๊ทธ๊ฒƒ์€ ์ง€๊ธˆ๊นŒ์ง€์ด์— ์ƒ๋‹นํžˆ ์ž˜ ์ˆ˜ํ–‰) ํ•ฉ๋ฆฌ์  ์ด๊ณ  ์ง๊ด€์  ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ์†”๋ฃจ์…˜์ด ๋‹ค๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด๋Ÿฌํ•œ ๊ด€์ ์—์„œ ๋ณด๋‹ค ํ•ฉ๋ฆฌ์ ์ธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‚˜์•„๊ฐˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@vexx32
์ด ์—ฐ์‚ฐ์ž๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

.
=
[]
,
+ - * / %
++ --
+=ย  -=ย  *=ย  /=ย %=

์ผ๋ฐ˜์ ์œผ๋กœ C#์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ์ ์ ˆํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ PowerShell์˜ ์ •์‹ ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ ๋™์ผํ•œ ๊ตฌ๋ฌธ์ด ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ๋งž๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ C#์—์„œ ๋ฒ—์–ด๋‚˜์ง€ ๋ง๋ผ๊ณ  ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค. #3240๊ณผ ํ•จ๊ป˜ ํ˜„์žฌ ์ œ์•ˆ์ด ๊ทธ ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์–ธ์–ด๋Š” ์ œ์ณ๋‘๊ณ  ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ? ์˜ ํ˜„์žฌ ์˜๋ฏธ๋Š” ์ œ์•ˆ๋œ ์—ฐ์‚ฐ์ž๋กœ ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

  • null-soaking( ?. ), null-coalescing( ?? ) ๋ฐ null ์กฐ๊ฑด๋ถ€ ํ• ๋‹น( ?= )๊ณผ ๊ฐ™์€ _related_ ์—ฐ์‚ฐ์ž๊ฐ€ ์ œ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ ์„ ํƒ -then / -else ์™€ ๊ฐ™์€ ์žฅํ™ฉํ•œ ์‚ผํ•ญ ํ˜•์‹์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ด€๋ จ ์—ฐ์‚ฐ์ž๊ฐ€ ๊ณตํ†ต์„ฑ(๊ฐœ๋…์ ์œผ๋กœ ๋ถ„๋ช…ํžˆ ๊ฐ–๊ณ  ์žˆ์Œ)์„ ๋ฐ˜์˜ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์˜ต์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์ด ์ด๊ตญ์ ์ผ์ˆ˜๋ก ๋” ์ž์„ธํ•œ ์ •๋ณด๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ผ์ˆ˜๋ก ๊ฐ„๊ฒฐํ•จ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ฌ๋ณผ ๊ธฐ๋ฐ˜ ํ‘œํ˜„์˜ ์ถ”์ƒ์„ฑ์€ ์˜ˆ๋ฅผ ๋“ค์–ด * ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ๋ฐ˜๋ณต์ ์ธ ๋…ธ์ถœ์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ๋…ผ์˜๋˜๋Š” ๋ชจ๋“  ์šด์˜์ž๋Š” ํ›„์ž์˜ ๋ฒ”์ฃผ์— ์†ํ•ฉ๋‹ˆ๋‹ค.


@RichardSiddaway :

$psitem์— ๋Œ€ํ•œ ๋‚ด ์˜๊ฒฌ์€ ๋‚ด ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒฝํ—˜์„ ํ•œ ๊ฒฝ์šฐ ๋‚ด ๊ฒฝํ—˜์ด ๋ฌดํšจํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์˜ˆ, ๊ท€ํ•˜์˜ ์˜๊ฒฌ์€ _๊ฐœ์ธ์ ์ธ_ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ๊ฐœ์ธ ๊ฒฝํ—˜๊ณผ ๊ด€๋ จ์ด ์—†๋Š” _์ผ๋ฐ˜์ ์ธ_ ์‚ฌ์šฉ ํŒจํ„ด์„ ์ถ”๋ก ํ•˜๊ธฐ ์œ„ํ•ด ์ธ๊ธฐ ์žˆ๋Š” Q & A ์‚ฌ์ดํŠธ ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์˜ _๋ถ„์„ ๋ฐ์ดํ„ฐ_๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ๊ฐœ์ธ์ ์ธ ๊ด€์ฐฐ์ด "์ดˆ๊ฐœ์ธ์ ์ธ" ์ง„์‹ค์„ ๋ฐ˜์˜ํ•œ๋‹ค๊ณ  ๋ฏฟ๋Š”๋‹ค๋ฉด ๋‚ด ์˜๊ฒฌ์„ ๋ฌดํšจํ™”ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋งŒ๋“ค๊ฒ ๋‹ค๊ณ  ํ–ˆ์ง€? ๊ทธ๋ ‡๋‹ค๋ฉด _that_์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ์˜ ๋ชจ๋“  ์—ฐ์‚ฐ์ž๋Š” ์˜๋ฏธ๊ฐ€ ๋น„๊ต์  ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ด๋˜๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. @mklement0 ๐Ÿ˜„

์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ์กฐ๊ฑด ์—ฐ์‚ฐ์ž์ด๊ณ  PS์˜ ๋ถ€์šธ/์กฐ๊ฑด ์—ฐ์‚ฐ์ž์˜ _๋ชจ๋‘_๋Š” ๋” ์ž์„ธํ•œ ํ˜•์‹์ž…๋‹ˆ๋‹ค: -and , -or , -eq , -ne , -contains ๋“ฑ

๊ทธ๋Ÿฌ๋‚˜ ์ฃผ๋ณ€ ๊ธฐ๋Šฅ ๋ฐ ๊ด€๋ จ ์—ฐ์‚ฐ์ž๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์•ฝ์นญ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—๋Š” ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” "ํ‘œ์ค€" ์‚ผํ•ญ ๊ตฌ๋ฌธ์ด ์ด๋ฏธ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋…ธ์ถœ ๋˜์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํŠนํžˆ ์ง๊ด€์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฐ์‚ฐ์ž๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค

๋‚˜์—ด๋œ ๊ฒƒ ์ค‘ + - * / % ๋งŒ (์ˆœ์ˆ˜ํ•œ) ์ˆ˜ํ•™์  ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์ดํ•ด๋œ ์ธก๋ฉด์€ ๋‹ค๋ฅธ ๊ฒƒ์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค( = , ํ‰๋“ฑ ํ…Œ์ŠคํŠธ์™€ ์ข…์ข… ํ˜ผ๋™๋œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ œ์™ธ) ).

<condition> ? <if-true> : <else> ๋ฅผ ๋น„๊ตํ•˜๋Š” ๋” ๋‚˜์€ ๊ตฌ์„ฑ์€ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹ˆ๋ผ if _statement_์ž…๋‹ˆ๋‹ค. if ๊ฐ€ ํ™•์‹คํžˆ ๋” ์žฅํ™ฉํ•˜์ง€๋งŒ ์‚ผํ•ญ ์—ฐ์‚ฐ์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ๊ทธ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค( if ์™€ ๋‹ฌ๋ฆฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ง„์ •ํ•œ ํ‘œํ˜„์ธ ๊ฒƒ ์™ธ์—๋„).

ํ™•์‹คํžˆ ๋ฒ”์œ„๊ฐ€ ์ข์ง€๋งŒ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์ œ์•ˆ๋˜๋Š” ๋ชจ๋“  ๊ด€๋ จ ์—ฐ์‚ฐ์ž๋ฅผ ์ˆ˜์šฉํ•˜๋ ค๋ฉด ๊ธฐํ˜ธ ๊ธฐ๋ฐ˜ ๊ตฌ๋ฌธ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์€ ์šฐ๋ฆฌ์—๊ฒŒ.

๊ธ€์Ž„์š”, ๊ณง ๋ฐ”๋€” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๐Ÿ˜
์š”์ ์€ ๋งž์ง€๋งŒ (a) ๊ตฌ๋ฌธ์ด ์‰ฝ๊ฒŒ ์„ค๋ช…๋˜๊ณ  if ๋ฌธ๊ณผ ๋™์ผํ•œ ๊ฐœ๋…์  ๋ณต์žก์„ฑ์„ ๊ฐ€์ง€๋ฉฐ (b) ๋ฐ˜๋ณต ๋…ธ์ถœ์€ ๊ธฐ์–ต ์œ ์ง€์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

@mklement0 ? ๋ฅผ ์œ ํšจํ•œ ์ด๋ฆ„ ๋ฌธ์ž๋กœ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํš๊ธฐ์ ์ธ ๋ณ€ํ™”? powershell ์ฝ”์–ด์— ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ powershell์— ์ •ํ†ตํ•˜๋ฉฐ ์ถ”๊ฐ€ ๊ตฌ๋ฌธ(๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๊ฑฐ์˜ 50๋…„ ๋™์•ˆ ์กด์žฌ)์ด ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ์ •๋ณด๋ฅผ ์›ํ•˜๋ฉด ํ•ญ์ƒ if/else ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

? ๋Š” ๋ช…๋ น ๋ชจ๋“œ์—์„œ ์œ ํšจํ•œ ๋ณ„์นญ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ‘œํ˜„ ๋ชจ๋“œ์˜ ๋ชจ๋“  ๋ณ€ํ˜•์—์„œ ํ˜„์žฌ๋กœ์„œ๋Š” ๋‹จ์ˆœํžˆ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์ถฉ๋Œ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹จ์ˆœํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

$Value = $true
$Value ? "Hello!" : "Goodbye!"

๊ฒฐ๊ณผ:

At line:1 char:8
+ $Value ? "Hello!" : "Goodbye!"
+        ~
Unexpected token '?' in expression or statement.
+ CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken

@vexx32

$what? # <- example of a valid variable name

๊ทธ์˜ null-soaking ์˜ˆ์ œ์—์„œ: $var?.maybenull() ๋Š” ๊ฑฐ๊ธฐ์— ๋ฌผ์Œํ‘œ๊ฐ€ ์žˆ๋Š”์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์œผ๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ์••์ถ•ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์‚ผํ•ญ์ด ๊นจ์ง‘๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ฃผ๋กœ ๋‹ค๋ฅธ ํ˜ธ์—์„œ ๋…ผ์˜๋˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์œ ํšจํ•œ ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฌธ์ž๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฐ์ œํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” PS ํŒ€์— ๋‹ฌ๋ ค ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฌธ์ž๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์ผ๋ถ€๋กœ ์‹ค์ œ๋กœ ? ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์„ ๋ณธ ์ ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@vexx32 ์˜ˆ, ๊ฑฐ๊ธฐ์— ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ”์œ„ ์ง€์ •์— ์ฃผ์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์ถ”๊ฐ€ ์˜ํ–ฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋Š” ์ด๋ฏธ ๋ฌธ์ž์—ด ํ™•์žฅ์—์„œ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ์–ด๋Š ์ •๋„ ์ต์ˆ™ํ•ด์•ผ ํ•จ).

$var = $test?$thing1:$thing2

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ป์งˆ ์†์— ์‚ฌ๋Š” ์šฐ๋ฆฌ๋“ค์—๊ฒŒ ๊ฐ€์žฅ์ž๋ฆฌ ์ผ€์ด์Šค์— ๋จธ๋ฆฌ์นด๋ฝ์„ ๋„ˆ๋ฌด ๋งŽ์ด ์ชผ๊ฐœ๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •๋จ:

$var = ${test}?${thing1}:$thing2

@mklement0 - ๋ฐ˜๋“œ์‹œ ๋™์˜ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๋น„๊ตํ•  ๋” ๋‚˜์€ ๊ตฌ์„ฑ?:to๋Š” ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹ˆ๋ผ if ๋ฌธ์ž…๋‹ˆ๋‹ค. if๊ฐ€ ํ™•์‹คํžˆ ๋” ์žฅํ™ฉํ•˜์ง€๋งŒ ์‚ผํ•ญ ์—ฐ์‚ฐ์ด ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ๊ทธ ์ธก๋ฉด์ž…๋‹ˆ๋‹ค(if์™€ ๋‹ฌ๋ฆฌ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์ง„์ •ํ•œ ํ‘œํ˜„์ธ ๊ฒƒ ์™ธ์—๋„).

ํŠนํžˆ C/C#์€ ๋ช…๋ น๋ฌธ ์ง€ํ–ฅ ์–ธ์–ด์ด์ง€๋งŒ ์กฐ๊ฑด์‹์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

ํ‘œํ˜„์‹ ์ง€ํ–ฅ ์–ธ์–ด(์˜ˆ: F# ๋˜๋Š” Rust)์—๋Š” ๋ถˆํ•„์š”ํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฐ„๊ฒฐํ•œ ๊ตฌ๋ฌธ์ด ์—†์Šต๋‹ˆ๋‹ค. ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋ฅผ ์ œ๊ฑฐ ํ•˜๋Š” Rust์— ๋Œ€ํ•œ ์ด ์˜ค๋ž˜๋œ

Rust์—์„œ ๋‚ด๊ฐ€ ์ •๋ง ์ข‹์•„ํ•˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ? ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. PowerShell์—์„œ ? ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ๋Š” ๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ์€ ์—†์ง€๋งŒ ? ๊ฐ€ ์กฐ๊ฑด์‹๋ณด๋‹ค ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋” ์ž˜ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@TheIncorrigible1 , @vexx32 : ์˜ˆ, null-soaking์€ ๊ธฐ์ˆ ์ ์œผ๋กœ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์ง€๋งŒ ํฌ๋งํ•˜๋Š” ์œ ํ˜•์€ ๋ฒ„ํ‚ท 3์ž…๋‹ˆ๋‹ค . ์‚ผํ•ญ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ๋ช…ํ™•์„ฑ์„ ์œ„ํ•ด ? ์•ž์— {...} / ๊ณต๋ฐฑ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด ๊ทธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@lzybkr :

ํŠนํžˆ C/C#์€ ๋ช…๋ น๋ฌธ ์ง€ํ–ฅ ์–ธ์–ด์ด์ง€๋งŒ ์กฐ๊ฑด์‹์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์Ž„, if ์™€ ๊ฐ™์€ PowerShell ํ๋ฆ„ ์ œ์–ด ๋ฌธ์€ _half_-ํ‘œํ˜„์‹์ž…๋‹ˆ๋‹ค. _simple_ ์‹์—์„œ ์ œ์•ˆ๋œ ์‚ผํ•ญ ์—ฐ์‚ฐ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. _nested_์—์„œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$foo = $True  ?     1   :      0    # proposed ternary
$foo = if ($True) { 1 } else { 0 }  # equivalent `if` statement
$foo = 1 + ($True  ?     1   :      0)   # nesting OK; note that + would have higher precedence
$foo = 1 + if ($True) { 1 } else { 0 }  # !! doesn't work
$foo = 1 + (if ($True) { 1 } else { 0 })  # !! doesn't work, even with parentheses
$foo = 1 + $(if ($True) { 1 } else { 0 })  # only $(...) (and situationally @(...)) work

$() / @() ์˜ ํ•„์š”์„ฑ์€ ๋‹จ์ˆœํ•œ ๊ตฌ๋ฌธ์ƒ์˜ ๋ถˆํŽธ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋™์ž‘ ๋ฐ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.

์ฆ‰, if ๋ฐ foreach ์™€ ๊ฐ™์€ ๋ช…๋ น๋ฌธ์ด ์ง„์ •ํ•œ ํ‘œํ˜„์ด _ํฌ๋ง_ํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ์‹คํŒจํ•˜๊ณ  ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์˜ˆ: foreach ($i in 1..5) { $i } | Write-Output ๋˜๋Š” foreach ($i in 1..5) { $i } > out.txt ).
๊ทธ๋Ÿฌ๋‚˜ _ํ•  ์ˆ˜ ์—†๋Š”์ง€_ ์—ฌ๋ถ€ ๋ฐ/๋˜๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
์ฐธ์กฐ: #6817


if ๊ฐ€ PowerShell์—์„œ ์™„์ „ํ•œ ํ‘œํ˜„์‹์ด ๋œ๋‹ค๋ฉด Rust์—์„œ 3ํ•ญ ์กฐ๊ฑด๋ฌธ์„ ์ œ๊ฑฐํ•œ ์ธ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋” ์ด์ƒ _necessary_๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ์ œ์•ˆ์— ๋Œ€ํ•œ ๋‚˜์˜ ๋™๊ธฐ๋Š” _ํ•„์š”์„ฑ_์ด ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•จ, ํŽธ์˜์„ฑ ๋ฐ ๊ฐ€๋…์„ฑ(์‹œ๊ฐ์  ํ˜ผ๋ž€)์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


์‚ฌ์šฉํ•  ๊ตฌ์ฒด์ ์ธ ์ œ์•ˆ์ด ์—†์Šต๋‹ˆ๊นŒ? PowerShell์—์„œ๋Š” ? ์กฐ๊ฑด์‹๋ณด๋‹ค ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์— ๋” ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

C#์—์„œ์™€ ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ? ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์˜์›ํ•œ ํ˜ผ๋ž€์˜ ์›์ธ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด์™€๋Š” ๋ณ„๋„๋กœ PowerShell์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๊ฐœ์„  ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

If/Then/Else์— ๋Œ€ํ•œ ๊ฐ„๊ฒฐํ•˜์ง€๋งŒ ์ง๊ด€์ ์ด์ง€ ์•Š์€ ๋Œ€์•ˆ์„ ์ฐพ๊ณ  ์žˆ๋‹ค๋ฉด ์ด๋ฏธ ํ•˜๋‚˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

( 'False', 'True' )[( Test-Condition )]

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ํ‘œํ˜„์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

"This statement is " + ( 'False', 'True' )[( Test-Condition )]

@TimCurwick : ๊ทธ๊ฒƒ์€ ๊ฐ„๊ฒฐํ•˜๊ณ (๋” ๋ชจํ˜ธํ•˜์ง€๋งŒ) ๋™๋“ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ œ์•ˆ๋œ ์‚ผํ•ญ ์กฐ๊ฑด์€ _short-circuiting_( if ๋ฌธ๊ณผ ๊ฐ™์Œ)์ธ ๋ฐ˜๋ฉด ๊ตฌ๋ฌธ์€ _both_ ๋Œ€์•ˆ์„ ๋ณ€ํ•จ์—†์ด ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๊ท€ํ•˜์˜ ๊ตฌ๋ฌธ์€ ๋ช…์‹œ๋œ ์ œํ•œ ์‚ฌํ•ญ์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‹ค์Œ์œผ๋กœ ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PowerShell์—์„œ ์‚ผํ•ญ ์„ ํƒ์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋…ผ์˜์™€ ๊ด€๋ จํ•˜์—ฌ -replace / .replace() ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํ˜•์‹์˜ ์˜ต์…˜์„ ๊ณ ๋ คํ•œ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

$a -eq $b -ternary $a,$c
$true -ternary 1,0

๋˜๋Š”

($a -eq $b).ternary($a,$c)
($true).ternary(1,0)

์ด๊ฒƒ์€ ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ternary ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ternary ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Œ์„ ๋ถ„๋ช…ํžˆ ํ•ฉ๋‹ˆ๋‹ค. ์žฅํ™ฉํ•˜์ง€๋งŒ ์“ฐ๊ธฐ์—๋Š” ์—ฌ์ „ํžˆ ์งง๊ณ  -operator $first,$second ์˜ ๊ธฐ์กด ๊ณตํ†ต ๋™์ž‘์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ชจ๋“  ๊ฒฝํ—˜ ๋ฒ”์œ„์˜ powershell ์‚ฌ์šฉ์ž์—๊ฒŒ ์นœ์ˆ™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿค” ํšจ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ œ์•ˆ๋œ ์–ด๋–ค ๋Œ€์•ˆ๋ณด๋‹ค ์–ด์ƒ‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. -replace ๋Š” ์‹ค์ œ ์ธ์ˆ˜ ๋ฐฐ์—ด์„ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. .Replace() ๋Š” PS ํŒ€์—์„œ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .NET System.String ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ตฌ๋ฌธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ETS ๋ฉ”์„œ๋“œ(๊ดœ์ฐฎ์ง€๋งŒ ์ฒจ๋ถ€ํ•ด์•ผ ํ•˜๋Š” ๊ฐœ์ฒด ์ƒ์„ฑ์— ์•ฝ๊ฐ„์˜ ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ) ๋˜๋Š” ์—ฐ์‚ฐ์ž ๋ฒ„์ „์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ œ์•ˆํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๋ฐฐ์—ด์„ ์ธ์ˆ˜๋กœ ์‰ฝ๊ฒŒ ๊ฐ€์งˆ ์ˆ˜ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒŒ์„œ์—์„œ ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ํŠน์ˆ˜ ์ผ€์ด์Šค๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹จ๋ฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์‚ผํ•ญ ๊ตฌ๋ฌธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ์˜ต์…˜ ๋ชจ๋‘๋ฅผ ์‹ค์ œ๋กœ ํ‰๊ฐ€ํ•˜๊ธฐ๋ฅผ _ ์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์˜ต์…˜์„ ๋ชจ๋‘ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์˜ฌ๋ฐ”๋ฅธ ๋ถ„๊ธฐ๋งŒ ํ‰๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๊ณ„์‚ฐ ์‹œ๊ฐ„์ด ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค(์ผ๋ถ€ ์‹ฌ๊ฐํ•œ ๋ถ€์ž‘์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ).

๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์ด๋ฏธ ํŠน๋ณ„ํ•œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ํ•„์š”๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผ๋ž€์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ๊ณผ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋ฐฐ์—ด์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ํ•˜๋‚˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "๋ฐฐ์—ด"์„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค๊ณ  ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”์†Œ๋“œ ์ธ์ˆ˜๊ฐ€ ์ด๋ฏธ ๋ฐฐ์—ด ๊ตฌ๋ฌธ๊ณผ ์•ฝ๊ฐ„ ์ถฉ๋Œํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ข…์ข… ์ด๋ฏธ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‰ผํ‘œ์— ๋Œ€ํ•œ _third_ ๋ณ€ํ˜• ๋™์ž‘์„ ํ˜ผํ•ฉ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@PowerShell/powershell-committee๋Š” ์ด์— ๋Œ€ํ•ด ๊ธธ๊ฒŒ ๋…ผ์˜ํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋™์˜ํ•˜์ง€ ์•Š์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ด ์˜ˆ์ƒ๋Œ€๋กœ ?: ๋ฅผ ์œ ์ง€ํ•˜๋Š” C# ๊ตฌ๋ฌธ๊ณผ ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. C# ๊ฐœ๋ฐœ์ž ์ถœ์‹ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์‹ค์ œ ์‚ฌ์šฉ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ์‹คํ—˜์ ์ž…๋‹ˆ๋‹ค.

@SteveL-MSFT ์ฆ‰, ๊ธฐ๋Šฅ์ด 7.0์œผ๋กœ ์ด๋™ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ? ๊ธฐํ˜ธ์—์„œ ? ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ํ˜ธํ™˜์„ฑ์ด ์†์ƒ๋ฉ๋‹ˆ๊นŒ?

@TheIncorrigible1 ์˜ˆ, ์ด ๊ธฐ๋Šฅ์€ PS7์—์„œ ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ? ๋ณ„์นญ ์‚ฌ์šฉ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ๊นจ์ง€์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. Where-Object ์™€ ternary ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋ ค๊ณ  ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณผ ๋•Œ ? ์‹œ๋ ฅ์— ๋Œ€ํ•œ ์šฐ๋ ค๊ฐ€ ์žˆ์ง€๋งŒ ์ด์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๊ฒƒ์ด ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

@SteveL-MSFT ์ด๋ฆ„์ด $isValid? ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ PS์˜ ํ˜„์žฌ ๋ฐ˜๋ณต์—์„œ ์œ ํšจํ•œ ํ† ํฐ์ž…๋‹ˆ๋‹ค.

@TheIncorrigible1 :

์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž์™€ ? ์‚ฌ์ด์— ๊ณต๋ฐฑ์ด ํ•„์š”ํ•˜๋ฉด ์ด์ „์— ์ œ์•ˆํ•œ ๋Œ€๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ๋‚˜์—๊ฒŒ ์™„๋ฒฝํ•˜๊ฒŒ ํ•ฉ๋ฆฌ์ ์ธ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

  • $number:42 ๊ฐ€ _์ „์ฒด์ ์œผ๋กœ_ ๋‹จ์ผ ๋ณ€์ˆ˜ ์ฐธ์กฐ๋กœ ํ•ด์„๋œ๋‹ค๋ฉด $true ? $number:42 ์™€ ๊ฐ™์€ ๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— : _๋˜ํ•œ_ ์ฃผ์œ„์— ๊ณต๋ฐฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • C#์€ true?number:42 _does_ ํ—ˆ์šฉํ•˜์ง€๋งŒ ํ•ด๋‹น ์ˆ˜์ค€์—์„œ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•  ํ•„์š” ๋˜๋Š” ์‹ค์ œ๋กœ ๊ฑฑ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ๊ฐ„๊ฒฐํ•จ์„ ์ค‘์š”์‹œํ•˜์ง€๋งŒ ๊ฐ€๋…์„ฑ์„ ํฌ์ƒํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ $true?$number:42 _ํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„_ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

((ํžŒํŠธ, ํžŒํŠธ) null ์กฐ๊ฑด๋ถ€ ์•ก์„ธ์Šค๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์—ญํ˜ธํ™˜์„ฑ์€ ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @KirkMunro ๊ฐ€ ์ตœ๊ทผ์— ์ฃผ์žฅํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‹๋ณ„์ž ์ด๋ฆ„์— ๋Œ€ํ•œ PowerShell์˜ ํ—ˆ์šฉ์„ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ ๊ทธ ๋ฐฐ๋Š” ํ•ญํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค )

์˜ˆ, ๊ณต๋ฐฑ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋– ๋‚˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ฒฐ๊ตญ ์ถฉ๋ถ„ํžˆ ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜

ํ”„๋กœํ† ํƒ€์ž…์€ ? ๋ฐ : ๋œ ์ˆซ์ž๋ฅผ ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์˜ ์ปจํ…์ŠคํŠธ์—์„œ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ ค๊ณ  ๋งค์šฐ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค(์—ฌ๊ธฐ์„œ ํ‘œํ˜„์‹์„ ์˜ˆ์ƒํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ๊ณ  ์žˆ์Œ). ๋”ฐ๋ผ์„œ ${isWindows}?12:47 ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
123? ๋˜๋Š” 1:23 ์™€ ๊ฐ™์€ ์ˆซ์ž๋Š” ์˜ค๋Š˜๋‚  ์ผ๋ฐ˜ ํ† ํฐ์œผ๋กœ ํ† ํฐํ™”๋˜๋ฉฐ ํ‘œํ˜„์‹์ด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ „ํ˜€ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜์˜ ๊ฒฝ์šฐ ๋ณ€์ˆ˜๊ฐ€ ํ‘œํ˜„์‹์ด๋ฏ€๋กœ ? ๋˜๋Š” : ๋ฅผ ๋ณ€์ˆ˜ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ์ „ํ˜€ ๋ณ€๊ฒฝ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์ง€์ , @daxian-dbw; {...} ๋ณ€์ˆ˜ ์ด๋ฆ„ ๊ฒฝ๊ณ„ ๋ชจํ˜ธ์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์œผ๋ฏ€๋กœ ์ฝ”๋“œ ๊ณจํผ๊ฐ€ ${isWindows}?${number}:47 ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

#10367์„ ํ†ตํ•ด ๋‹ซ๊ธฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰