Command Substitution์ด๋ž€?

Command Substitution์€ ๋ช…๋ น์–ด์˜ ์ถœ๋ ฅ์„ ๋‹ค๋ฅธ ๋ช…๋ น์–ด์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” Shell์˜ ๊ธฐ๋Šฅ์ด๋‹ค. ๋งˆ์น˜ ์š”๋ฆฌ ์ค‘์— ํ•œ ์š”๋ฆฌ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋‹ค๋ฅธ ์š”๋ฆฌ์˜ ์žฌ๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ํ•œ ๋ช…๋ น์–ด์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ๋ช…๋ น์–ด์˜ ์ž…๋ ฅ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ ๋™์ž‘ ๋ฐฉ์‹

Command Substitution์€ ๋‘ ๊ฐ€์ง€ ๋ฌธ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค:

  1. ์ƒˆ๋กœ์šด ๋ฌธ๋ฒ•: $(command)
  2. ์ „ํ†ต์ ์ธ ๋ฌธ๋ฒ•: command (๋ฐฑํ‹ฑ)

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ

1. ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ

# ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉ
touch backup-$(date +%Y%m%d).txt
 
# ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ ๊ฐœ์ˆ˜ ์ €์žฅ
file_count=$(ls -1 | wc -l)
 
# ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ๋ณ€์ˆ˜์— ์ €์žฅ
kernel_version=$(uname -r)

2. ๋ช…๋ น์–ด ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ๋ช…๋ น์–ด์˜ ์ธ์ž๋กœ ์‚ฌ์šฉ

# ๊ฐ€์žฅ ํฐ ์šฉ๋Ÿ‰์˜ ํŒŒ์ผ ์ฐพ๊ธฐ
largest_file=$(du -h * | sort -rh | head -n 1 | cut -f2)
echo "๊ฐ€์žฅ ํฐ ํŒŒ์ผ์€ $largest_file ์ž…๋‹ˆ๋‹ค"
 
# ํŠน์ • ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
kill $(pgrep firefox)

๊ณ ๊ธ‰ ํ™œ์šฉ๋ฒ•

1. ์ค‘์ฒฉ ์‚ฌ์šฉ

# ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ ํ›„ ๊ทธ ์•ˆ์œผ๋กœ ์ด๋™
cd $(mkdir -p $(date +%Y)/$(date +%m) && echo $(date +%Y)/$(date +%m))

2. ๋ฃจํ”„์—์„œ ํ™œ์šฉ

# ๋ชจ๋“  .txt ํŒŒ์ผ์˜ ๋‚ด์šฉ ํ•ฉ์น˜๊ธฐ
for file in $(find . -name "*.txt"); do
    cat "$file" >> combined.txt
    echo "์ฒ˜๋ฆฌ๋œ ํŒŒ์ผ: $file"
done

์ฃผ์˜์‚ฌํ•ญ

  1. ๋ช…๋ น์–ด ์‹คํ–‰ ์‹คํŒจ ์‹œ ๋นˆ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜
  2. ๊ณต๋ฐฑ์ด ํฌํ•จ๋œ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์‹œ ๋”ฐ์˜ดํ‘œ ํ•„์š”
  3. ํฐ ์ถœ๋ ฅ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฃผ์˜
  4. ์žฌ๊ท€์  ์‚ฌ์šฉ ์‹œ ์„ฑ๋Šฅ ์˜ํ–ฅ ๊ณ ๋ ค

์‹ค์šฉ์  ํ™œ์šฉ ์‚ฌ๋ก€

1. ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ

# ๋‚ ์งœ๋ฅผ ํฌํ•จํ•œ ๋ฐฑ์—… ์ƒ์„ฑ
backup_dir="/backup/$(date +%Y%m%d)"
mkdir -p "$backup_dir"
tar czf "$backup_dir/backup.tar.gz" $(find . -mtime -1 -type f)

2. ์‹œ์Šคํ…œ ๋ชจ๋‹ˆํ„ฐ๋ง

# ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๊ธฐ๋ก
echo "๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰: $(free -h | grep Mem | awk '{print $3}')"
echo "๋””์Šคํฌ ์‚ฌ์šฉ๋Ÿ‰: $(df -h / | tail -1 | awk '{print $5}')"

3. ๋™์  ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ

cat > config.json << EOF
{
    "hostname": "$(hostname)",
    "ip_address": "$(hostname -I | awk '{print $1}')",
    "kernel": "$(uname -r)",
    "timestamp": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF

์„ฑ๋Šฅ๊ณผ ๋ณด์•ˆ ๊ณ ๋ ค์‚ฌํ•ญ

  1. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ํŒŒ์ดํ”„ ์‚ฌ์šฉ ๊ถŒ์žฅ
  2. ๋ช…๋ น์–ด ์ธ์ ์…˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ ์ž…๋ ฅ ๊ฒ€์ฆ
  3. ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ์ข…๋ฃŒ ์ƒํƒœ ํ™•์ธ
  4. ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

๋Œ€์•ˆ๊ณผ ๋น„๊ต

  1. ํŒŒ์ดํ”„๋ผ์ธ (|)
    • ์žฅ์ : ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 
    • ๋‹จ์ : ๋ณ€์ˆ˜ ์ €์žฅ ๋ถˆ๊ฐ€
  2. ํ”„๋กœ์„ธ์Šค ์น˜ํ™˜ (<(command))
    • ์žฅ์ : ํŒŒ์ผ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
    • ๋‹จ์ : ๋ฌธ๋ฒ•์ด ๋” ๋ณต์žก

๊ฒฐ๋ก 

Command Substitution์€ Shell ์Šคํฌ๋ฆฝํŒ…์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์œผ๋กœ, ๋ช…๋ น์–ด์˜ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค๋ฅธ ์ปจํ…์ŠคํŠธ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋ฉด ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.