はい!今やってます!

Work Pertly, Live Idly

シェルの引数あれこれ

シェルで引数を取得したい場合は

$1:1つ目の引数

という感じで取得できるが、

$0:実行時のコマンド名
$#:引数の数
$@:実行時に指定された全パラメーター

というような指定も可能。

というのは割と常識なんだけど、

$BASH_SOURCE:実行時のコマンド名

という方法で$0と同等のことをすることができる。

ただ厄介なのが、shellの実行方式や実行するshellによって結果が変わる。

具体的には

source ./shell_name

とすると$0には-bash

zsh test

とすると$BASH_SOURCEには空文字が入ってくる

結論どうするのが良いかというと$0を使いたいときは

${BASH_SOURCE:-$0}

とするか

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
  <処理>
fi

とするのがよい