シェルの位置パラメタ

微妙に忘れるからmemo

  • $0〜$9には引数が格納される
    • $i ⇔ C言語:argv[i]
    • Cと一緒でプログラム(シェル)名が0番目の名前になる
  • $#は$0以外の引数の数を示す
  • $@、S*は$1以降の引数全てを表す
    • "$@"、"$*"みたいに""で囲むと違いが出る。
      • "$@" : "$1" "$2" "$3"
      • "$*" : "$1 $2 $3"
    • 引数に空白含んでなかったら違いはないのであまり気にしなくてよい

実行例

### hoge.sh ###
#!/bin/sh
echo $0 $1 $2 $3 $4 $5
echo $#
echo $@
$ ./hoge.sh aaa bbb ccc ddd eee
./hoge.sh aaa bbb ccc ddd eee
5
aaa bbb ccc ddd eee

ちなみに位置パラメタは$9までしかないので、10個以上引数を取るときは以下のような技で。

### foo.sh ###
#!/bin/sh
shift 3       # shift [n]
echo $0 $1 $2 $3 $4 $5
echo $#
echo $@
$ ./foo.sh aaa bbb ccc ddd eee
./foo.sh ddd eee               # 引数がshiftの数だけずれる
2                              # 引数の数も変わる
ddd eee