shellで引数を1個ズラす

Shellスクリプトでn番目以降の引数全てを取得する」で、「Shellスクリプトで、第一番目の引数だけを消費して、残りの引数はその先のプログラムに渡したい」ときに使えると書きましたが、そのものズバリ引数を消費する機能があるんですね。

shiftを利用すると、引数($@)の中身が、先頭から一個後ろにズレます。

例えば次のような関数を作るとすると、

echo_all() {
  if [ $# -gt 0 ]; then
    echo $1
    shift
    echo_all $@
  else
    echo "Fin."
  fi
}

次のように出力されます。

$ echo 1 2 3 4
1
2
3
4
Fin.

参考