๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
6. CS ๊ธฐ์ดˆ ๐Ÿ“š/Linux & Unix ๐Ÿง

[Linux/Unix][3-1] bash metacharacter (*, ?, $, &)/echo ๋ช…๋ น์–ด/Bash C printf() ๋ฌธ๋ฒ•

by lxvxxu 2025. 10. 21.

 

๐Ÿงญ Bash ๋ฉ”ํƒ€๋ฌธ์ž (Metacharacter)

๋ฉ”ํƒ€๋ฌธ์ž(Metacharacter)๋Š” Bash์—์„œ ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๊ธฐํ˜ธ๋ฅผ ๋งํ•œ๋‹ค.
ํŒŒ์ผ๋ช… ํ™•์žฅ(globbing), ๋ช…๋ น ์‹คํ–‰, ๋ณ€์ˆ˜ ์น˜ํ™˜, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ฒ˜๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐ŸŒŸ 1) * (Asterisk)

ํ•ญ๋ชฉ์„ค๋ช…

 

์˜๋ฏธ 0๊ฐœ ์ด์ƒ์˜ ์ž„์˜์˜ ๋ฌธ์ž์™€ ๋งค์นญ
ํŠน์ง• - ์ˆจ๊น€ ํŒŒ์ผ(.์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํŒŒ์ผ)์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค์นญ๋˜์ง€ ์•Š์Œ
- ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜์ง€ ์•Š์Œ
- ์ž‘์€๋”ฐ์˜ดํ‘œ(')๋‚˜ ํฐ๋”ฐ์˜ดํ‘œ(")๋กœ ๊ฐ์‹ธ๋ฉด ๊ธ€์ž ๊ทธ๋Œ€๋กœ ์ธ์‹
$ ls
a.txt  b.txt  c.log  .hidden

$ echo *.txt
a.txt b.txt         # .hidden์€ ํฌํ•จ๋˜์ง€ ์•Š์Œ

$ echo "*.txt"
*.txt               # ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋ฉด ์™€์ผ๋“œ์นด๋“œ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ

$ echo **/*.txt
dir1/a.txt dir2/b.txt   # (bash 4 ์ด์ƒ + globstar ์˜ต์…˜์ผ ๋•Œ๋งŒ ์žฌ๊ท€ ํƒ์ƒ‰)

 

โ“ 2) ? (Question mark)

ํ•ญ๋ชฉ์„ค๋ช…
์˜๋ฏธ ์ •ํ™•ํžˆ ํ•œ ๊ธ€์ž์™€ ๋งค์นญ
ํŠน์ง• ์ˆจ๊น€ ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ์™ธ๋จ.
๋ฌธ์ž ์ˆ˜๊ฐ€ ๊ณ ์ •๋œ ํŒŒ์ผ๋ช…์„ ์ฐพ์„ ๋•Œ ์œ ์šฉํ•จ.
์ž๋ฆฟ ์ˆ˜ ๊ณ ์ • ํŒจํ„ด์„ ๋งŒ๋“ค ๋•Œ๋Š” ์œ ์šฉํ•˜์ง€๋งŒ, ๋‹ค๊ตญ์–ด(UTF-8)  ๋‚˜ ์ด๋ชจ์ง€ ๋“ฑ ์ผ๋ถ€ ์…ธ/๋กœ์ผ€์ผ์—์„œ 'ํ•œ ๋ฌธ์ž'์˜ ์ •์˜๊ฐ€ locale ์„ค์ •์— ๋”ฐ๋ผ ์ฒด๊ฐ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 'file?.txt'๋Š” 'file1.txt', 'fileA.txt'์™€ ๋งค์นญํ•˜์ง€๋งŒ 'file10.txt'๋Š” ๋ถˆ์ผ์น˜ํ•œ๋‹ค.

$ ls
file1.txt  file2.txt  file10.txt  fileA.txt

$ echo file?.txt
file1.txt file2.txt fileA.txt    # file10.txt๋Š” ๋ถˆ์ผ์น˜

 

๐Ÿ’ฒ 3) $ (Dollar sign)

ํ•ญ๋ชฉ์„ค๋ช…
์˜๋ฏธ ๋ณ€์ˆ˜, ๋ช…๋ น, ์ˆ˜์‹์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜
์‚ฌ์šฉ ํ˜•ํƒœ - ๋ณ€์ˆ˜ ์น˜ํ™˜: $var ๋˜๋Š” ${var}
- ๋ช…๋ น ์น˜ํ™˜: $(command) → ๋ช…๋ น์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋กœ ๋Œ€์ฒด
- ์‚ฐ์ˆ  ์น˜ํ™˜: $((expression)) → ์ •์ˆ˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋กœ ๋Œ€์ฒด
ํŠน์ˆ˜ ๋ณ€์ˆ˜ $? (์ง์ „ ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ฝ”๋“œ), $! (๋ฐฑ๊ทธ๋ผ์šด๋“œ PID), $$ (ํ˜„์žฌ ์…ธ PID), $@ (๋ชจ๋“  ์ธ์ž) ๋“ฑ

์•ˆ์ „์„ ์œ„ํ•ด '"${var}"'์ฒ˜๋Ÿผ ํฐ ๋”ฐ์˜ดํ‘œ๋ฅผ ์ ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

ํŠน์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” ์ง์ „ ์ข…๋ฃŒ์ฝ”๋“œ '$?', ์ง์ „ ๋ฐฑ๊ทธ๋ผ์šด๋“œ PID '$!', ํ˜„์žฌ ์…ธ PID '$$$', ์ธ์ž ๋ณด์กด ์ „๋‹ฌ '$@' ๋“ฑ์ด ์žˆ๋‹ค.

$ name="Linux"
$ echo "Hello, $name"
Hello, Linux

$ echo "Home: ${HOME}"
Home: /home/user

$ echo "Today: $(date +%Y-%m-%d)"
Today: 2025-10-21

$ echo $((3 + 7))
10

$ false
$ echo $?
1                      # ์ด์ „ ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ฝ”๋“œ (0=์„ฑ๊ณต, 1=์‹คํŒจ)

๐Ÿ’ก TIP: ๋ณ€์ˆ˜ ์น˜ํ™˜ ์‹œ "${var}"์ฒ˜๋Ÿผ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋ฉด ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๊ฐ’๋„ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

HOME์€ ํ™˜๊ฒฝ ๋ณ€์ˆ˜, ํ˜„์žฌ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ฒฝ๋กœ๋ฅผ ๋œปํ•œ๋‹ค.

data +%Y-%m-%d๋Š” ์˜ค๋Š˜ ๋‚ ์งœ๋ฅผ "์—ฐ-์›”-์ผ" ํ˜•์‹์œผ๋กœ ์ถœ๋ ฅํ•˜๋ผ๋Š” ์˜๋ฏธ

 

๐Ÿงฉ  $?

ํ•ญ๋ชฉ์„ค๋ช…
์˜๋ฏธ ์ง์ „ ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ƒํƒœ ์ฝ”๋“œ(exit status)
๊ฐ’ 0 = ์„ฑ๊ณต, 0์ด ์•„๋‹˜ = ์‹คํŒจ
์‚ฌ์šฉ ๋ชฉ์  ์กฐ๊ฑด๋ฌธ(if, &&, `

๐Ÿ“˜ ์˜ˆ์‹œ

 
$ ls /tmp
# (์„ฑ๊ณต)

$ echo $?
0                  # ์„ฑ๊ณต(0)

$ ls /no/such/path
ls: cannot access '/no/such/path': No such file or directory
$ echo $?
2                  # ์‹คํŒจ(2)

๐Ÿ’ก ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ return ๊ฐ’์ด๋‚˜ exit() ์ฝ”๋“œ๊ฐ€ ์—ฌ๊ธฐ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ 4๏ธโƒฃ #! (Shebang, ์‰๋ฑ…)

ํ•ญ๋ชฉ์„ค๋ช…
์˜๋ฏธ “์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ(์ธํ„ฐํ”„๋ฆฌํ„ฐ)์„ ์“ธ์ง€” ์ง€์ •
์œ„์น˜ .sh ํŒŒ์ผ์˜ ๋งจ ์ฒซ ์ค„์—๋งŒ ์‚ฌ์šฉ
์ด๋ฆ„ Shebang (# + !)

๐Ÿ“˜ ์˜ˆ์‹œ: hello.sh

#!/bin/bash
echo "Hello Shell"
 

์‹คํ–‰

$ ./hello.sh
Hello Shell
 

๐Ÿ’ก #!/bin/bash ๋ผ๊ณ  ์ ์œผ๋ฉด “์ด ํŒŒ์ผ์€ bash๋กœ ์‹คํ–‰ํ•ด๋ผ”๋Š” ๋œป์ด์—์š”.
Python ์Šคํฌ๋ฆฝํŠธ๋Š” #!/usr/bin/python3์ฒ˜๋Ÿผ ์”๋‹ˆ๋‹ค.


๐Ÿงฉ 5๏ธโƒฃ ## (๋ฌธ์ž์—ด ์ž˜๋ผ๋‚ด๊ธฐ — Prefix ์ œ๊ฑฐ)

ํ•ญ๋ชฉ์„ค๋ช…
ํ˜•ํƒœ ${๋ณ€์ˆ˜##ํŒจํ„ด}
๊ธฐ๋Šฅ ๋ณ€์ˆ˜์˜ ๊ฐ’์—์„œ ๊ฐ€์žฅ ๊ธด ์ ‘๋‘์‚ฌ(prefix) ๋ฅผ ํŒจํ„ด์œผ๋กœ ์ œ๊ฑฐ
๋ฐ˜๋Œ€ ๊ธฐ๋Šฅ ${๋ณ€์ˆ˜#ํŒจํ„ด} → ๊ฐ€์žฅ ์งง์€ ์ ‘๋‘์‚ฌ ์ œ๊ฑฐ

๐Ÿ“˜ ์˜ˆ์‹œ

 
$ path="/home/user/docs/report.txt"

$ echo ${path#*/}
home/user/docs/report.txt      # ์ฒซ '/' ์•ž๋ถ€๋ถ„ ์ œ๊ฑฐ (์งง์€ ์ œ๊ฑฐ)

$ echo ${path##*/}
report.txt                     # ๋งˆ์ง€๋ง‰ '/' ์•ž๋ถ€๋ถ„๊นŒ์ง€ ์ œ๊ฑฐ (๊ธด ์ œ๊ฑฐ)

๐Ÿ’ก #์€ “์•ž์—์„œ๋ถ€ํ„ฐ ์ž๋ฅด๊ธฐ”,
##๋Š” “์•ž์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์ž๋ฅด๊ธฐ”์˜ ์˜๋ฏธ์˜ˆ์š”.


๐Ÿงฉ 6๏ธโƒฃ $@ (๋ชจ๋“  ์ธ์ž)

ํ•ญ๋ชฉ์„ค๋ช…
์˜๋ฏธ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๋ชจ๋“  ์ธ์ž(arguments)
ํ˜•ํƒœ $1, $2, $3... ๊ฐ๊ฐ์˜ ์ธ์ž ๊ฐœ๋ณ„ ์ ‘๊ทผ๋„ ๊ฐ€๋Šฅ
์ฐจ์ด์  $@์™€ $*๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋”ฐ์˜ดํ‘œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ๋‹ค๋ฆ„

๐Ÿ“˜ ์˜ˆ์‹œ

#!/bin/bash
echo "๋ชจ๋“  ์ธ์ž: $@"
echo "์ฒซ ๋ฒˆ์งธ: $1"
echo "์ธ์ž ์ˆ˜: $#"
 

์‹คํ–‰

$ ./test.sh apple banana cherry
๋ชจ๋“  ์ธ์ž: apple banana cherry
์ฒซ ๋ฒˆ์งธ: apple
์ธ์ž ์ˆ˜: 3
 

๐Ÿ’ก $#๋Š” ์ธ์ž์˜ “๊ฐœ์ˆ˜(count)”๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

$*์™€ $@๋Š” ๋‘˜ ๋‹ค “์Šคํฌ๋ฆฝํŠธ๋‚˜ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ๋ชจ๋“  ์ธ์ž(arguments)” ๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ,
๋”ฐ์˜ดํ‘œ(" ")๋กœ ๊ฐ์Œ€ ๋•Œ ๋™์ž‘์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.


๐Ÿงฉ 1๏ธโƒฃ ๊ธฐ๋ณธ ๊ฐœ๋…

ํ‘œํ˜„์˜๋ฏธ
$* ๋ชจ๋“  ์ธ์ž๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰
$@ ๋ชจ๋“  ์ธ์ž๋ฅผ ๊ฐ๊ฐ์˜ ๋…๋ฆฝ๋œ ๋ฌธ์ž์—ด๋กœ ์ทจ๊ธ‰

์ฆ‰, " "(๋”ฐ์˜ดํ‘œ) ์•ˆ์—์„œ ์“ฐ๋А๋ƒ์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ต๋‹ˆ๋‹ค ๐Ÿ‘‡


๐Ÿ“˜ 2๏ธโƒฃ ์˜ˆ์‹œ ์ฝ”๋“œ (args.sh)

 
#!/bin/bash
echo '--- "$*" ์ถœ๋ ฅ ---'
for arg in "$*"; do
    echo "[$arg]"
done

echo '--- "$@" ์ถœ๋ ฅ ---'
for arg in "$@"; do
    echo "[$arg]"
done

๐Ÿ’ก 3๏ธโƒฃ ์‹คํ–‰ ๊ฒฐ๊ณผ

$ bash args.sh apple banana "cherry pie"
 

์ถœ๋ ฅ:

 
--- "$*" ์ถœ๋ ฅ ---
[apple banana cherry pie]       ← ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ์ธ์‹

--- "$@" ์ถœ๋ ฅ ---
[apple]
[banana]
[cherry pie]                    ← ๊ฐ ์ธ์ž๊ฐ€ ๋”ฐ๋กœ ์œ ์ง€๋จ

โš™๏ธ 4๏ธโƒฃ ์ •๋ฆฌ ์š”์•ฝ

ํ‘œํ˜„์˜๋ฏธ๋”ฐ์˜ดํ‘œ ์•ˆ์—์„œ์˜ ๋™์ž‘์˜ˆ์‹œ
$* ๋ชจ๋“  ์ธ์ž๋ฅผ “ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด”๋กœ ํ•ฉ์นจ "apple banana cherry pie" "${1} ${2} ${3}" ์ฒ˜๋Ÿผ ํ•ฉ์ณ์ง
$@ ๋ชจ๋“  ์ธ์ž๋ฅผ “๊ฐœ๋ณ„ ์ธ์ž”๋กœ ์œ ์ง€ "apple" "banana" "cherry pie" ์ธ์ž ๊ตฌ๋ถ„์ด ๊ทธ๋Œ€๋กœ ์œ ์ง€๋จ

๐Ÿง  5๏ธโƒฃ ์–ธ์ œ ๋ฌด์—‡์„ ์จ์•ผ ํ• ๊นŒ?

  • "$@" → โœ… ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ์‚ฌ์šฉ (๊ถŒ์žฅ)
    → ์ธ์ž์— ๊ณต๋ฐฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ ์ •ํ™•ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•จ.
  • "$*" → โš ๏ธ ๊ฑฐ์˜ ์“ฐ์ด์ง€ ์•Š์Œ
    → ์ธ์ž๋“ค์ด ํ•œ ์ค„๋กœ ํ•ฉ์ณ์ ธ์„œ, ๊ตฌ๋ถ„์ด ์‚ฌ๋ผ์ง.

๐Ÿ“˜ 6๏ธโƒฃ ์ถ”๊ฐ€ ์‹ค์Šต (์ฐจ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด๊ธฐ)

 
#!/bin/bash
echo 'Using "$*":'
printf "%s\n" "$*"

echo 'Using "$@":'
printf "%s\n" "$@"

 

์‹คํ–‰

$ bash test.sh "New York" Seoul Paris

์ถœ๋ ฅ

Using "$*":
New York Seoul Paris

Using "$@":
New York
Seoul
Paris

โœ… ๊ฒฐ๋ก  ์š”์•ฝ

๊ตฌ๋ถ„$*$@
์˜๋ฏธ ๋ชจ๋“  ์ธ์ž ๋ชจ๋“  ์ธ์ž
๋”ฐ์˜ดํ‘œ ์•ˆ์—์„œ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ ๊ฐ๊ฐ์„ ๋…๋ฆฝ๋œ ์ธ์ž๋กœ
๊ณต๋ฐฑ ํฌํ•จ ์ธ์ž ์ฒ˜๋ฆฌ ๊นจ์ง ์•ˆ์ „
์ถ”์ฒœ ์—ฌ๋ถ€ โŒ โœ… (ํ•ญ์ƒ ์ด๊ฑธ ์จ๋ผ!)

โœ… ํ•œ ์ค„ ์š”์•ฝ

"${@}"๋Š” “์ธ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์„œ ์ „๋‹ฌ”,
"${*}"๋Š” “์ธ์ž๋“ค์„ ๊ณต๋ฐฑ์œผ๋กœ ์ด์–ด๋ถ™์—ฌ ํ•œ ๋ฌธ์ž์—ด๋กœ ๋งŒ๋“ฆ”.
์‹ค๋ฌด๋‚˜ ์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ํ•ญ์ƒ "$@"๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค.

 


๐Ÿง  ์ถ”๊ฐ€๋กœ ์•Œ์•„๋‘๋ฉด ์ข‹์€ $ ๊ด€๋ จ ํŠน์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ

๊ธฐํ˜ธ์˜๋ฏธ์˜ˆ์‹œ
$0 ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„ /home/user/script.sh
$1~$9 ์ฒซ ๋ฒˆ์งธ~์•„ํ™‰ ๋ฒˆ์งธ ์ธ์ž $1=์ฒซ ์ธ์ž
$# ์ธ์ž ๊ฐœ์ˆ˜ 3
$@ ๋ชจ๋“  ์ธ์ž (๊ณต๋ฐฑ ๊ตฌ๋ถ„) arg1 arg2 arg3
$* ๋ชจ๋“  ์ธ์ž (ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋กœ) "arg1 arg2 arg3"
$? ์ง์ „ ๋ช…๋ น์˜ ์ข…๋ฃŒ ์ƒํƒœ 0 ๋˜๋Š” ๋น„0
$$ ํ˜„์žฌ ์…ธ์˜ PID(Process ID) ์˜ˆ: 3482
$! ๋งˆ์ง€๋ง‰ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค์˜ PID ์˜ˆ: 4521

 

โš™๏ธ 4) & (Ampersand)

ํ•ญ๋ชฉ์„ค๋ช…
์˜๋ฏธ ๋ช…๋ น์–ด๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰
ํŠน์ง• ๋ช…๋ น ๋์— &๋ฅผ ๋ถ™์ด๋ฉด ์…ธ์€ ์ฆ‰์‹œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋ช…๋ น์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ณ„์† ์‹คํ–‰๋จ.

 ‘’cmd &”๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

$ sleep 5 &
[1] 2345                # [์ž‘์—… ๋ฒˆํ˜ธ] [PID]
$ echo "Running in background"
Running in background

$ jobs
[1]+  Running  sleep 5 &

$ fg
sleep 5                 # ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ํฌ๊ทธ๋ผ์šด๋“œ๋กœ ๋ณต๊ท€

 


โœ… ์ •๋ฆฌ ์š”์•ฝ

๋ฉ”ํƒ€๋ฌธ์ž์˜๋ฏธ์ฃผ์š” ์šฉ๋„์ฃผ์˜์‚ฌํ•ญ

 

* 0๊ฐœ ์ด์ƒ ์ž„์˜์˜ ๋ฌธ์ž ํŒŒ์ผ๋ช… ๋งค์นญ (์™€์ผ๋“œ์นด๋“œ) ์ˆจ๊น€ ํŒŒ์ผ์€ ๋งค์นญ ์•ˆ ๋จ
? ์ •ํ™•ํžˆ ํ•œ ๋ฌธ์ž ์ž๋ฆฌ์ˆ˜ ๊ณ ์ • ๊ฒ€์ƒ‰ ๋‹ค๊ตญ์–ด ํ™˜๊ฒฝ์—์„œ๋Š” “ํ•œ ๊ธ€์ž” ์ •์˜ ์ฃผ์˜
$ ๋ณ€์ˆ˜, ๋ช…๋ น, ์‚ฐ์ˆ  ์น˜ํ™˜ ๋™์  ๊ฐ’ ์ถœ๋ ฅ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉ
& ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰ ๋น„๋™๊ธฐ ๋ช…๋ น ์ˆ˜ํ–‰ PID ๋ฐ ์ข…๋ฃŒ ์ฝ”๋“œ ํ™•์ธ ํ•„์š”

โœ… ์ตœ์ข… ์ •๋ฆฌ ๋ฌธ์žฅ

Bash ๋ฉ”ํƒ€๋ฌธ์ž๋Š” ๋‹จ์ˆœํ•œ ๊ธฐํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ,
์…ธ์—์„œ ํŒŒ์ผ ๊ฒ€์ƒ‰·๋ณ€์ˆ˜ ์น˜ํ™˜·ํ”„๋กœ์„ธ์Šค ์ œ์–ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด๋‹ค.
ํŠนํžˆ *, ?, $, &๋Š” ์‹ค๋ฌด ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์—์„œ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ฉ”ํƒ€๋ฌธ์ž์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ตํ˜€๋‘์–ด์•ผ ํ•œ๋‹ค.

 

 


 

๐Ÿ—ฃ๏ธ echo ๋ช…๋ น์–ด

โœ… ๊ฐœ์š”

echo๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด์˜ˆ์š”.
์…ธ์—์„œ ํ™”๋ฉด์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜, ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ™•์ธํ•  ๋•Œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๐Ÿงฉ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

echo [์˜ต์…˜] [๋ฌธ์ž์—ด]

๐Ÿ“˜ ์˜ˆ์‹œ 1 — ๋‹จ์ˆœ ๋ฌธ์ž์—ด ์ถœ๋ ฅ

 
$ echo Hello, world!
Hello, world!โ€‹

๐Ÿ“˜ ์˜ˆ์‹œ 2 — ๋ณ€์ˆ˜ ์ถœ๋ ฅ

 
$ name="Alice"
$ echo $name
Alice

๐Ÿ’ก $name ๋Œ€์‹  "${name}"์ฒ˜๋Ÿผ ์“ฐ๋ฉด, ๊ฐ’ ์•ˆ์— ๊ณต๋ฐฑ์ด ์žˆ์–ด๋„ ์•ˆ์ „ํ•ด์š”.


๐Ÿ“˜ ์˜ˆ์‹œ 3 — ์ค„๋ฐ”๊ฟˆ ์—†์ด ์ถœ๋ ฅ

 
$ echo -n "No newline"
No newline$

(-n ์˜ต์…˜์€ ์ถœ๋ ฅ ํ›„ ์ค„๋ฐ”๊ฟˆ์„ ํ•˜์ง€ ์•Š์Œ)


๐Ÿ“˜ ์˜ˆ์‹œ 4 — ์ œ์–ด๋ฌธ์ž(์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค) ์ฒ˜๋ฆฌ

 
$ echo -e "line1\nline2"
line1
line2

(-e ์˜ต์…˜์„ ๋ถ™์ด๋ฉด \n, \t ๊ฐ™์€ ์ œ์–ด๋ฌธ์ž๋ฅผ ์ธ์‹ํ•ฉ๋‹ˆ๋‹ค.)


โœ… ์ฃผ์š” ์˜ต์…˜ ์š”์•ฝ

์˜ต์…˜์„ค๋ช…
-n ์ค„๋ฐ”๊ฟˆ ์—†์ด ์ถœ๋ ฅ
-e ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž(\n, \t ๋“ฑ) ํ•ด์„
-E (๊ธฐ๋ณธ๊ฐ’) ์ด์Šค์ผ€์ดํ”„ ๋ฌธ์ž ํ•ด์„ํ•˜์ง€ ์•Š์Œ

๐Ÿ’ก ํ™œ์šฉ ์˜ˆ์‹œ

$ echo "ํ˜„์žฌ ๊ฒฝ๋กœ: $(pwd)"
ํ˜„์žฌ ๊ฒฝ๋กœ: /home/user
 

Bash์—์„œ์˜ C์–ธ์–ด printf() ๋ฌธ๋ฒ•

์ด๊ฑด Bash์—์„œ C ์–ธ์–ด์˜ printf() ๋ฌธ๋ฒ•์„ ๊ทธ๋Œ€๋กœ ์“ด ๋ช…๋ น์–ด์˜ˆ์š”.
์•„๋ž˜์— ์™„์ „ํžˆ ํ’€์–ด์„œ ์„ค๋ช…ํ•ด์ค„๊ฒŒ์š” ๐Ÿ‘‡


๐Ÿงฉ printf "%s\n" "$*" ์˜ ๊ตฌ์กฐ ๋ถ„์„


1๏ธโƒฃ printf ๋ช…๋ น์–ด๋ž€?

Bash์˜ printf๋Š” C ์–ธ์–ด์˜ printf() ํ•จ์ˆ˜์™€ ๊ฑฐ์˜ ๋™์ผํ•œ ํ˜•์‹ ์ง€์ • ์ถœ๋ ฅ ํ•จ์ˆ˜์˜ˆ์š”.

echo๋ณด๋‹ค ๋” ์ •๋ฐ€ํ•˜๊ฒŒ ํฌ๋งท(ํ˜•์‹)์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

 
 
printf "ํ˜•์‹(format)" ์ธ์ž1 ์ธ์ž2 ...

2๏ธโƒฃ " %s\n "์˜ ์˜๋ฏธ

์ด๊ฑด **์ถœ๋ ฅ ํ˜•์‹ ๋ฌธ์ž์—ด(format string)**์ด์—์š”.
C์–ธ์–ด์™€ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ํ† ํฐ์˜๋ฏธ
%s ๋ฌธ์ž์—ด(string) ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•˜๋ผ
\n ์ค„๋ฐ”๊ฟˆ(newline)์„ ๋„ฃ์–ด๋ผ

์ฆ‰ " %s\n "์€

“๋ฌธ์ž์—ด ํ•˜๋‚˜๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ค„๋ฐ”๊ฟˆํ•ด๋ผ”
๋Š” ๋œป์ด์—์š”.