Linux

[Linux] Shell Script ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•˜๊ธฐ(2)

The Engineer, Lucy 2025. 5. 6. 23:28

๋งค๊ฐœ๋ณ€์ˆ˜ ํ™•์žฅ

  • ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ธฐ๋ณธ๊ฐ’์„ ๋Œ€์ฒดํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.
  • 3ํ•ญ ์—ฐ์‚ฌ์ž์™€ ์œ ์‚ฌํ•œ ์—ฐ์‚ฐ๋“ค์„ ๋ณ€์ˆ˜์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ์ด๋Ÿฐ ๋ณ€์ˆ˜๋“ค์€ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์˜ํ•ด ์ž…๋ ฅ๋ฐ›์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ๋ฒ”์œ„๋ฅผ ํ™•์žฅ์‹œ์ผœ ์คŒ.

๊ธฐ๋ณธ ๋ณ€์ˆ˜ ์‚ฌ์šฉ๋ฒ•

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

๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”(ํ• ๋‹น, ์น˜ํ™˜)ํ•˜๊ธฐ ์œ„ํ•œ ํ™•์žฅ ๋ณ€๊ฒฝ์ž

ํ™•์žฅ์ž ์„ค๋ช…
${๋ณ€์ˆ˜:-๋ฌธ์ž์—ด} ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€  ๊ฒฝ์šฐ ๋ฌธ์ž์—ด๋กœ ๋ณ€์ˆ˜๋ฅผ ์น˜ํ™˜
${๋ณ€์ˆ˜=๋ฌธ์ž์—ด} ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ  ๋ณ€์ˆ˜ ์น˜ํ™˜
${๋ณ€์ˆ˜:=๋ฌธ์ž์—ด} ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ NULL๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ณ  ๋ณ€์ˆ˜ ์น˜ํ™˜
${๋ณ€์ˆ˜+๋ฌธ์ž์—ด} ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด๋กœ ๋ณ€์ˆ˜ ์น˜ํ™˜
${๋ณ€์ˆ˜:+๋ฌธ์ž์—ด} ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜๊ณ , NULL ์ด์™ธ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ํ‘œ์ค€์˜ค๋ฅ˜ ์ถœ๋ ฅ์œผ๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ
${๋ณ€์ˆ˜?์—๋Ÿฌ ๋ฉ”์‹œ์ง€} ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ํ‘œ์ค€์˜ค๋ฅ˜ ์ถœ๋ ฅ์œผ๋กœ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ
${๋ณ€์ˆ˜:?์—๋Ÿฌ ๋ฉ”์‹œ์ง€} ๋ณ€์ˆ˜๊ฐ€ NULL ์ดํšŒ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ NULL์ธ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์…ธ์„ ์ข…๋ฃŒ
${๋ณ€์ˆ˜:์‹œ์ž‘ ์œ„์น˜} ๋ณ€์ˆ˜๊ฐ’์ด ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ ์‹œ์ž‘ ์œ„์น˜๋ถ€ํ„ฐ ๋ฌธ์ž์—ด ๊ธธ์ด ๋๊นŒ์ง€ ์ถœ๋ ฅ
${๋ณ€์ˆ˜:์‹œ์ž‘ ์œ„์น˜:๊ธธ์ด} ๋ณ€์ˆ˜๊ฐ’์ด ๋ฌธ์ž์—ด์ผ ๊ฒฝ์šฐ ์‹œ์ž‘ ์œ„์น˜๋ถ€ํ„ฐ ๊ธธ์ด๊นŒ์ง€ ์ถœ๋ ฅ

${๋ณ€์ˆ˜-๋ฌธ์ž์—ด}๊ณผ ${๋ณ€์ˆ˜:-๋ฌธ์ž์—ด}

$ OS_TYPE=redhat
$ echo ${OS_TYPE:-ubuntu}
redhat
$ echo ${OS_TYPE-ubuntu}
redhat
$ unset OS_TYPE
$ echo ${OS_TYPE:-ubuntu}
ubuntu
$ echo ${OS_TYPE-ubuntu}
ubuntu
$ OS_TYPE=""
$ echo ${OS_TYPE:-ubuntu}
ubuntu
$ echo ${OS_TYPE-ubuntu}

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ณ€์ˆ˜์— ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์„ค์ •๋œ ๊ฐ’์„ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ๋ณ€์ˆ˜์— NULL๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ž์—ด์„ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ.

${๋ณ€์ˆ˜:-๋ฌธ์ž์—ด}๊ณผ ${๋ณ€์ˆ˜:=๋ฌธ์ž์—ด}

$ OS_TYPE=""
$ echo ${OS_TYPE:-redhat}
redhat
$ echo $OS_TYPE

$ echo ${OS_TYPE:=redhat}
redhat
$ echo $OS_TYPE
redhat

${๋ณ€์ˆ˜:=๋ฌธ์ž์—ด} โžก๏ธ ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์„ ๋ณ€์ˆ˜์— ์ €์žฅ.

๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์—ˆ์„ ๊ฒฝ์šฐ์˜ ${๋ณ€์ˆ˜:+๋ฌธ์ž์—ด}๊ณผ ${๋ณ€์ˆ˜+๋ฌธ์ž์—ด}

๋ณ€์ˆ˜์— ๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ ์„ค์ •๋œ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ์ž.

$ OS_TYPE="ubuntu"
$ echo ${OS_TYPE:+redhat}
redhat
$ echo ${OS_TYPE+redhat}
redhat

๋ณ€์ˆ˜์— ์„ค์ •๋œ ๊ฐ’์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ์น˜ํ™˜ ๊ฐ€๋Šฅ.

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ NULL๊ฐ’์ผ ๊ฒฝ์šฐ์˜ ${๋ณ€์ˆ˜:+๋ฌธ์ž์—ด}๊ณผ ${๋ณ€์ˆ˜+๋ฌธ์ž์—ด}

$ OS_TYPE=""
$ echo ${OS_TYPE:+redhat}

$ echo ${OS_TYPE+redhat}
redhat
$ unset OS_TYPE
$ echo ${OS_TYPE:+redhat}

$ echo ${OS_TYPE+redhat}

${๋ณ€์ˆ˜:+๋ฌธ์ž์—ด} โžก๏ธ ๋ณ€์ˆ˜์— NULL๊ฐ’์ด ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ๋ณ€์ˆ˜๊ฐ€ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  NULL์„ ์ถœ๋ ฅ.
${๋ณ€์ˆ˜+๋ฌธ์ž์—ด} โžก๏ธ ๋ฐ˜๋Œ€๋กœ ๋ณ€์ˆ˜๊ฐ€ NULL๋กœ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ณ  ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅ.
๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋Š” ๋‘˜ ๋‹ค NULL๊ฐ’์„ ์ถœ๋ ฅ.

๋ณ€์ˆ˜๊ฐ€ NULL์ผ ๊ฒฝ์šฐ ${๋ณ€์ˆ˜:?์—๋Ÿฌ ๋ฉ”์‹œ์ง€}์™€ ${๋ณ€์ˆ˜?์—๋Ÿฌ ๋ฉ”์‹œ์ง€}

๋ณ€์ˆ˜์— ๊ฐ’์ด ์„ค์ •๋˜์—ˆ์„ ๊ฒฝ์šฐ์—๋Š” ์„ค์ •๋œ ๊ฐ’์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , NULL์ด ์„ค์ •๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ํ™•์žฅ์ž๊ฐ€ ์žˆ๋Š” ๋ฐ˜๋ฉด, NULL๋„ ๊ฐ’์ด๋ผ๊ณ  ์ธ์‹ํ•˜๊ณ  NULL๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ™•์žฅ์ž๊ฐ€ ์žˆ์Œ.

$ OS_TYPE="redhat"
$ echo ${OS_TYPE:?null or not set}
redhat
$ echo ${OS_TYPE:?not set}
redhat
$ OS_TYPE=""
$ echo ${OS_TYPE:?null or not set}
-bash: OS_TYPE: null or not set
$ echo $?
1 # ๋น„์ •์ƒ ์ข…๋ฃŒ์ด๋ฏ€๋กœ ํŠน์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ $?๋Š” 1์„ ์ถœ๋ ฅ.
$ echo ${OS_TYPE?not set}

$ echo $?
0 # ์ •์ƒ ์ข…๋ฃŒ์ด๋ฏ€๋กœ ํŠน์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜ $?๋Š” 0 ์ถœ๋ ฅ.

${๋ณ€์ˆ˜:?์—๋Ÿฌ ๋ฉ”์‹œ์ง€} โžก๏ธ NULL๊ฐ’์„ ์—๋Ÿฌ๋กœ ์ธ์‹ํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ํ›„ ์…ธ ์Šคํฌ๋ฆฝํŠธ ์ข…๋ฃŒ.
${๋ณ€์ˆ˜?์—๋Ÿฌ ๋ฉ”์‹œ์ง€} โžก๏ธ NULL๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ.

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์˜ ${๋ณ€์ˆ˜:?์—๋Ÿฌ ๋ฉ”์‹œ์ง€}์™€ ${๋ณ€์ˆ˜?์—๋Ÿฌ ๋ฉ”์‹œ์ง€}

$ unset OS_TYPE
$ echo ${OS_TYPE:?null or not set}
-bash: OS_TYPE: null or not set
$ echo $?
1
$ echo ${OS_TYPE?not set}
-bash: OS_TYPE: not set
$ echo $?
1
$ echo ${OS_TYPE?}
-bash: OS_TYPE: parameter not set

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ๋‘˜๋‹ค ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ํ›„ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข…๋ฃŒ.
${๋ณ€์ˆ˜?}๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ ํ›„ ์…ธ ์Šคํฌ๋ฆฝํŠธ ์ข…๋ฃŒ ๊ฐ€๋Šฅ. ์ด ๊ฒฝ์šฐ์—๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ parameter null or not set์œผ๋กœ ์ถœ๋ ฅ.

๋ณ€์ˆ˜์˜ ๋ฌธ์ž์—ด ์ž๋ฅด๊ธฐ

$ OS_TYPE="Redhat Ubuntu Fedora Debian"
$ echo ${OS_TYPE:14}
Fedora Debian
$ echo ${OS_TYPE:14:6}
Fedora
$ echo ${OS_TYPE:(-6)}
Debian
$ echo ${OS_TYPE:(-6):2}
De
$ echo ${OS_TYPE:(-6):-2}
Debi

${๋ณ€์ˆ˜:์‹œ์ž‘ ์œ„์น˜} โžก๏ธ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์˜ ์œ„์น˜๋ถ€ํ„ฐ ๋ฌธ์ž์—ด ๋๊นŒ์ง€๋ฅผ ๋ฆฌํ„ด.
${๋ณ€์ˆ˜:์‹œ์ž‘ ์œ„์น˜:๊ธธ์ด} โžก๏ธ ํ•ด๋‹น ๊ธธ์ด๋งŒํผ๋งŒ ๋ฌธ์ž์—ด ๋ฆฌํ„ด.

๋ณ€์ˆ˜์˜ ๋ฌธ์ž์—ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ํ™•์žฅ์ž

๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๋ฌธ์ž์—ด๋กœ ์„ค์ •๋˜์—ˆ์„ ๊ฒฝ์šฐ ํŒจํ„ด์„ ํ†ตํ•ด ๋ฌธ์ž์—ด์„ ๋ณ€๊ฒฝํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ์ž๋“ค.

ํ™•์žฅ์ž ์„ค๋ช…
${๋ณ€์ˆ˜#ํŒจํ„ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด ์•ž์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ ์ฐพ์€ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด ์•ž์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด ์ œ๊ฑฐ
${๋ณ€์ˆ˜##ํŒจํ„ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด ์•ž์—์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์€ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด ์•ž์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด ์ œ๊ฑฐ
${๋ณ€์ˆ˜%ํŒจํ„ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ ์ฐพ์€ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด ๋’ค์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด ์ œ๊ฑฐ
${๋ณ€์ˆ˜%%ํŒจํ„ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด ์•ž์—์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์€ ํŒจํ„ด๊ณผ ์ผ์น˜ํ•˜๋Š” ํŒจํ„ด ๋’ค์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด ์ œ๊ฑฐ
${#๋ณ€์ˆ˜} ๋ณ€์ˆ˜์˜ ๊ธธ์ด ๋ฆฌํ„ด
${๋ณ€์ˆ˜/์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ
๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐ
${๋ณ€์ˆ˜/#์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ๋ฌธ์ž์—ด์ด ํŒจํ„ด๊ณผ ๋งž๋Š” ๊ฒฝ์šฐ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ
${๋ณ€์ˆ˜/%์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด} ๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž์—ด์ด ํŒจํ„ด๊ณผ ๋งž๋Š” ๊ฒฝ์šฐ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝ

${๋ณ€์ˆ˜#ํŒจํ„ด}๊ณผ ${๋ณ€์ˆ˜##ํŒจํ„ด}

๋ณ€์ˆ˜๊ฐ€ ๋ฌธ์ž์—ด๋กœ ์„ค์ •๋˜์—ˆ์„ ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์—์„œ ํŒจํ„ด์„  ์ฐพ์•„ ํŒจํ„ด ์•ž์˜ ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•ด ์คŒ.

$ FILE_NAME="myvm_container-repo.tar.gz"
$ echo ${FILE_NAME#*_}
container-repo.tar.gz
$ echo ${FILE_NAME#*-}
repo.tar.gz

${๋ณ€์ˆ˜#ํŒจํ„ด} โžก๏ธ ๋ฌธ์ž์—ด ์•ž์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ ์ฐพ์€ ํŒจํ„ด ์•ž์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•ด ์คŒ.
${๋ณ€์ˆ˜##ํŒจํ„ด} โžก๏ธ ๋ฌธ์ž์—ด ์•ž์—์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์€ ํŒจํ„ด ์•ž์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•ด ์คŒ.

*๋Š” ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์˜๋ฏธ

${๋ณ€์ˆ˜%ํŒจํ„ด}๊ณผ ${๋ณ€์ˆ˜%%ํŒจํ„ด}

๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด์—์„œ ํŒจํ„ด์„ ์ฐพ์•„ ํŒจํ„ด ๋’ค์˜ ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•ด ์คŒ.

$ echo ${FILE_NAME%.*}
myvm_container-repo.tar
$ echo ${FILE_NAME%%.*}
myvm_container-repo

${๋ณ€์ˆ˜%ํŒจํ„ด} โžก๏ธ ๋ฌธ์ž์—ด์˜ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ ์ฐพ์€ ํŒจํ„ด ๋’ค์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•ด ์คŒ.
${๋ณ€์ˆ˜%%ํŒจํ„ด} โžก๏ธ ๋ฌธ์ž์—ด์˜ ๋’ค์—์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์€ ํŒจํ„ด ๋’ค์˜ ๋ชจ๋“  ๋ฌธ์ž์—ด์„ ์ œ๊ฑฐํ•ด ์คŒ.

ํŒŒ์ผ๋ช…๊ณผ ํŒŒ์ผ ๊ฒฝ๋กœ ์ถ”์ถœ ์˜ˆ

$ FILE_PATH="/etc/nova/nova.conf"
$ echo ${FILE_PATH%/*} # ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ ์ฐพ์€ / ๋’ค ๋ฌธ์ž์—ด ๋ชจ๋‘ ์ œ๊ฑฐ.
/etc/nova
$ echo ${FILE_PATH##*/} # ์•ž์—์„œ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์€ / ๋’ค ๋ฌธ์ž์—ด ๋ชจ๋‘ ์ œ๊ฑฐ.
nova.conf
$ echo ${#FILE_PATH} # ๋ฌธ์ž์—ด ๊ธธ์ด
19

${๋ณ€์ˆ˜/์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด}๊ณผ ${๋ณ€์ˆ˜//์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด}

๋ณ€์ˆ˜์— ์„ค์ •๋œ ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ๋ฌธ์ž์—ด์„ ์ฐพ์•„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ดํ•ด ์คŒ. ๋ฐ”๊ฟ€ ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ฐพ์€ ๋ฌธ์ž์—ด์€ ์ œ๊ฑฐ.

$ OS_TYPE="Redhat Linux Ubuntu Linux Fedora Linux"
$ echo ${OS_TYPE/Linux/OS}
Redhat OS Ubuntu Linux Fedora Linux
$ echo ${OS_TYPE//Linux/OS}
Redhat OS Ubuntu OS Fedora OS
$ echo ${OS_TYPE/Linux}
Redhat Ubuntu Linux Fedora Linux
$ echo ${OS_TYPE//Linux}
Redhat Ubuntu Fedora
$ echo ${OS_TYPE/#Redhat/Unknown}
Unknown Linux Ubuntu Linux Fedora Linux
$ echo ${OS_TYPE/%Linux/Unknown}
Redhat Linux Ubuntu Linux Fedora Unknown

${๋ณ€์ˆ˜/์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด} โžก๏ธ ๋ฌธ์ž์—ด ์•ž์—์„œ๋ถ€ํ„ฐ ์ฒ˜์Œ์œผ๋กœ ์ฐพ์€ ๋ฌธ์ž์—ด์„ ๋ฐ”๊ฟ€๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”์คŒ.
${๋ณ€์ˆ˜//์ฐพ์„๋ฌธ์ž์—ด/๋ฐ”๊ฟ€๋ฌธ์ž์—ด} โžก๏ธ ๋ฌธ์ž์—ด ์ „์ฒด์—์„œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ ์ฐพ์•„ ๋ฐ”๊ฟ€๋ฌธ์ž์—ด๋กœ ๋ชจ๋‘ ๋ฐ”๊ฟ”์คŒ.


๋”๋ณด๊ธฐ
๋”๋ณด๊ธฐ

์ฐธ๊ณ  ๋„์„œ

์ฒ˜์Œ ๋ฐฐ์šฐ๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ