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-์กฐ๊ฑด๋ถ ํ ๋น ๊ตฌํ
๋ช
๋ น๋ฌธ์์ ํ ๋น์ ํ์ฉํ๋๋ก ๋ณ๊ฒฝํ๋ฉด ์ผํญ ์ฐ์ฐ์์ ํ์์ฑ์ด ์ค์ด๋ญ๋๋ค. ๋น์ ์ ๋จ์ํ ํ ์ ์์ต๋๋ค
$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 ํ๊ทธ ์ง๋ฌธ์์ ์คํ ์ค๋ฒํ๋ก๋ฅผ ๋ณด๋ฉด ๋ค์์ ์ป์ต๋๋ค(์ด ๊ธ์ ์ฐ๋ ์์ ๊ธฐ์ค).
powershell
ํ๊ทธ๊ฐ ์ง์ ๋ ๊ฒ์๋ฌผ 106,000 PSItem
๋ผ๋ ๋จ์ด๋ฅผ ํฌํจํฉ๋๋ค (๊ทธ ์ค 13๊ฐ๋ ์ง๋ฌธ์
๋๋ค). ์ฆ, 1% ๋ฏธ๋ง์
๋๋ค.$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์ ํตํด ๋ซ๊ธฐ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@RichardSiddaway : 2014๋ ๋ถํฐ _asked๋ PowerShell ํ๊ทธ ์ง๋ฌธ์์ ์คํ ์ค๋ฒํ๋ก๋ฅผ ๋ณด๋ฉด ๋ค์์ ์ป์ต๋๋ค(์ด ๊ธ์ ์ฐ๋ ์์ ๊ธฐ์ค).
powershell
ํ๊ทธ๊ฐ ์ง์ ๋ ๊ฒ์๋ฌผ 106,000PSItem
๋ผ๋ ๋จ์ด๋ฅผ ํฌํจํฉ๋๋ค (๊ทธ ์ค 13๊ฐ๋ ์ง๋ฌธ์ ๋๋ค). ์ฆ, 1% ๋ฏธ๋ง์ ๋๋ค.$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
๋ณด๋ค$_
๋ฅผ ์ ํธํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.