問題の所在
シェルスクリプトでは、引数を付けて起動すると、引数$1
、$2
...として使うことができます。
例えば、
#!/bin/sh
echo "$1"
echo "$2"
というシェルスクリプトを"test.sh
"という名前で作り、
> test.sh foo bar
と実行すれば、
> test.sh foo bar
foo
bar
という実行結果が得られます。
通常はこれで十分なのですが、まれにシェルスクリプト内で引数を設定したい場合があります。
例えば、引数がない場合には、デフォルトの値を使うような場合です。
ダメな方法
引数がない場合は、引数$1
に"baz
"を、引数$2
に"qux
"を設定する場合を考えてみます。
そのような場合に、通常の変数の設定と同じように、
#!/bin/sh
if [ $# -eq 0 ]; then
1=baz
2=qux
fi
などとすると、エラーになります。シェル変数の名前には、先頭の文字に数字は使えないというルールがあるためです。
正しい方法
このような場合には、set
を使い、
#!/bin/sh
if [ $# -eq 0 ]; then
set -- baz qux
fi
とします。これで、引数$1
に"baz
"が、引数$2
に"qux
"が設定されます。
あまり使わないのですが、あまり使わないだけに、使いたいときに思い出せずに困るので、備忘のためにも記事にしておきます。
注)"foo
"、"bar
"、"baz
"、"qux
"は、日本語の"〇〇"とか"なになに"とかと同じで、特に意味のない文字列です。