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 は二つ目の引数だ。

あちこちのホストで試してみた。長いこと知らなかった。