sh -c へ引数を渡す ― 2012年08月28日 15時14分44秒
sh -c
を用いてファイルに書かずに、シェルスクリプトを実行出来る。Makefile などで、わざわざ別にファイルを作る程でもない時、csh 系のシェルを使っていてループを使いたい時など、幾つかの場面がある。
そのスクリプトに更に引数を渡すことも出来る。
ただ、厄介なのがその引数の扱われ方。sh -c
でコマンドを渡した後に残ったものが、引数として扱われる。そして、面白いことに、一つ目の引数は $0 になり、それに順次続くといった動作になっている。
Solaris % sh -c 'echo $1' one two three
two
AIX % sh -c 'echo $1' one two three
two
FreeBSD % sh -c 'echo $1' one two three
two
linux% sh -c 'echo $1' one two three
two
通常のシェルスクリプト内では、$0 はプログラム自体で、$1 は一つ目の引数になる。sh -c
の $1 は二つ目の引数だ。
あちこちのホストで試してみた。長いこと知らなかった。
最近のコメント