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

[Linux/Unix][3-5] shift ๋ช…๋ น ํ”„๋กœ๊ทธ๋žจ

by lxvxxu 2025. 10. 21.

 

๊ฐ™์ด ๋ณด๋ฉด ์ข‹์€ ๊ธ€

2025.10.21 - [5. Computer Science Basics ๐Ÿงฑ/Linux & Unix ๐Ÿง] - [Linux/Unix] 03-4. sh ํŒŒ์ผ / ๋งค๊ฐœ๋ณ€์ˆ˜ ํ™•์žฅ ๋ฌธ๋ฒ• / ${:-}, ${:=}, ${:+}, ${:?}

 

[Linux/Unix] 03-4. sh ํŒŒ์ผ / ๋งค๊ฐœ๋ณ€์ˆ˜ ํ™•์žฅ ๋ฌธ๋ฒ• / ${:-}, ${:=}, ${:+}, ${:?}

๊ฐ™์ด ๋ณด๋ฉด ์ข‹์€ ๊ธ€2025.10.21 - [5. Computer Science Basics ๐Ÿงฑ/Linux & Unix ๐Ÿง] - [Linux/Unix] 03-1. bash metacharacter (*, ?, $, &)/echo ๋ช…๋ น์–ด/Bash C printf() ๋ฌธ๋ฒ• [Linux/Unix] 03-1. bash metacharacter (*, ?, $, &)/echo ๋ช…๋ น์–ด/Bash C pri

lxvxxu.tistory.com

 

2025.10.21 - [5. Computer Science Basics ๐Ÿงฑ/Linux & Unix ๐Ÿง] - [Linux/Unix] 03-1. bash metacharacter (*, ?, $, &)/echo ๋ช…๋ น์–ด/Bash C printf() ๋ฌธ๋ฒ•

 

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

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

lxvxxu.tistory.com

 

 

#!/bin/bash
echo number of arguments is $#
echo arguments are $*
echo command is $0
echo first argument is $1
shift
echo number of arguments is $#
echo arguments are $*
echo command is $0
echo first argument is $1

exit 0

 

๋ฌด์—‡์„ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์ธ๊ฐ€?

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ช…๋ นํ–‰ ์ธ์ž(positional parameters) ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.
ํŠนํžˆ shift๊ฐ€ $1, $2, … ๋ฅผ ํ•œ ์นธ์”ฉ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ํšจ๊ณผ๋ฅผ ๋ฐ๋ชจํ•ฉ๋‹ˆ๋‹ค.


ํ•ต์‹ฌ ๊ธฐํ˜ธ ์„ค๋ช…

  • $# : ํ˜„์žฌ ์ธ์ž์˜ ๊ฐœ์ˆ˜
  • $* : ๋ชจ๋“  ์ธ์ž๋ฅผ ๊ณต๋ฐฑ์œผ๋กœ ์—ฐ๊ฒฐํ•œ ๋ฌธ์ž์—ด
  • $0 : ์‹คํ–‰๋œ ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„(๊ฒฝ๋กœ)
  • $1 : ์ฒซ ๋ฒˆ์งธ ์ธ์ž
  • shift [n] : ์ธ์ž๋ฅผ n์นธ ์™ผ์ชฝ์œผ๋กœ ์ด๋™(๊ธฐ๋ณธ 1์นธ).
    • ์‹คํ–‰ ํ›„ $1 ← ๊ธฐ์กด $2, $2 ← ๊ธฐ์กด $3 …
    • ์ธ์ž ๊ฐœ์ˆ˜ #$๋Š” ์ค„์–ด๋“ฆ

์ค„-by-์ค„ ๋™์ž‘

1. ์ดˆ๊ธฐ ์ƒํƒœ ์ถœ๋ ฅ

echo number of arguments is $#
echo arguments are $*
echo command is $0
echo first argument is $1
  • ์ธ์ž์˜ ๊ฐœ์ˆ˜, ์ „์ฒด ์ธ์ž, ์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„, ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
2. shift
shift
  • ๋ชจ๋“  ์ธ์ž๋ฅผ ํ•œ ์นธ ์™ผ์ชฝ์œผ๋กœ ์ด๋™์‹œํ‚ต๋‹ˆ๋‹ค.
    ์˜ˆ: ์›๋ž˜ $1=a, $2=b, $3=c ์˜€๋‹ค๋ฉด → shift ํ›„ $1=b, $2=c ๊ฐ€ ๋จ.
    #$๋Š” 1 ๊ฐ์†Œ
3. ์ด๋™ ํ›„ ์ƒํƒœ ์žฌ์ถœ๋ ฅ
echo number of arguments is $#
echo arguments are $*
echo command is $0
echo first argument is $1
 
  • ์ด๋™ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
 
4. ์ •์ƒ ์ข…๋ฃŒ
exit 0

์‹คํ–‰ ์˜ˆ์‹œ 1: ์ธ์ž 3๊ฐœ ์ „๋‹ฌ

 
$ bash demo.sh alpha beta gamma

 

์ถœ๋ ฅ

number of arguments is 3
arguments are alpha beta gamma
command is demo.sh
first argument is alpha
number of arguments is 2
arguments are beta gamma
command is demo.sh
first argument is beta
 

์„ค๋ช…:

  • ์ฒ˜์Œ์—” #$=3, $1=alpha.
  • shift ํ›„ #$=2, $1์ด beta๋กœ ๋ฐ”๋€œ.
  • $0(์Šคํฌ๋ฆฝํŠธ ์ด๋ฆ„)์€ ๋ณ€ํ•˜์ง€ ์•Š์Œ.

์‹คํ–‰ ์˜ˆ์‹œ 2: ์ธ์ž 1๊ฐœ ์ „๋‹ฌ

 
$ bash demo.sh only

์ถœ๋ ฅ

number of arguments is 1
arguments are only
command is demo.sh
first argument is only
number of arguments is 0
arguments are 
command is demo.sh
first argument is

์„ค๋ช…:

  • shift ํ›„์—” ๋” ์ด์ƒ ์ธ์ž๊ฐ€ ์—†์–ด #$=0, $1์€ ๋นˆ ๊ฐ’.

ํŒ · ์ฃผ์˜์‚ฌํ•ญ

  • shift n์ฒ˜๋Ÿผ ์ˆซ์ž๋ฅผ ์ฃผ๋ฉด n์นธ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
    ์˜ˆ: shift 2 → $1←$3, $2←$4 …
  • ๋‚จ์€ ์ธ์ž ์ˆ˜๋ณด๋‹ค ํฐ ์ˆ˜๋กœ shiftํ•˜๋ฉด ์—๋Ÿฌ:
shift 5
# bash: shift: shift count out of range
  • ์ธ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•˜๋ ค๋ฉด $*๋ณด๋‹ค "$@"๊ฐ€ ๋” ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค(๊ณต๋ฐฑ ํฌํ•จ ์ธ์ž๋„ ๋ถ„๋ฆฌ ์œ ์ง€).
  • ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐ๋ชจ ๋ชฉ์ ์ด๋ผ $*๋ฅผ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์‹ค๋ฌด์—์„  ๋ณดํ†ต "$@"๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

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

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” $#, $*, $0, $1์„ ์ถœ๋ ฅํ•ด๋ณด๊ณ , shift๋กœ ์ธ์ž๋ฅผ ํ•œ ์นธ ๋ฐ€์–ด ์ธ์ž ๊ฐœ์ˆ˜์™€ ์ฒซ ์ธ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค.