Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

shiftで関数やスクリプトファイルの引数を順繰りによむ

実際のところ

$ foobar () { printf $1; shift; printf "_"$1; }
$ foobar 12 34
12_34

応用例:パラメータの読み込み

shiftをつかうとオプション値の順次読み込みのような動作を実現できます。

#!/bin/bash

declare color=null
declare value=0
until (($#==0)); do
  case $1 in
    -c|-color) color=$2; shift;;
    -v|-value) value=$2; shift;;
  esac
  shift
done

printf "color %s, value. %s\r\n" $color $value

動かすと、以下のようにパラメータを入れ替えても空でも動いてくれます。便利。

$ bash foobar.bash -v 12 -c red
color red, value. 12
$ bash foobar.bash -c blue -v 46
color blue, value. 46
$ bash foobar.bash -color white -v 1234
color white, value. 1234
$ bash foobar.bash -c yellow
color yellow, value. 0