シェルスクリプトも他のコマンド同様に引数を受け取るとができます。 シェルはコマンドラインを処理した後でこのために用意された特殊なシェル変数に 与えられた引数値を格納してからスクリプトを実行します。これらの特殊なシェル変数 は位置パラメータと呼ばれドル記号 $ に続く1文字の数字で表現します。 $1, $2 $9はそれぞれ第1、第2、 第9引数に対応します。
位置パラメータはドル記号 $ に続く1個の数字で表されますので9個を超える
引数を直接参照することはできません。もし10個目、あるいはそれ以降の
位置パラメータを参照するには shiftコマンドを使います。
shiftコマンドを実行すると位置パラメータの内容が左に1つシフトし、
$1に $2の内容が、$2には $3の内容が、と位置パラメータの内容が順次
左に送られ、$9にいままで隠れていた第10引数の内容が入ります。
この時に引数の数を表すシェル変数 $#
の内容も1つ減少します。
shiftコマンドで位置パラメータをシフトさせると古い $1 の内容は失われてしまい ます。もしその後の処理に古い $1 が必要ならば shiftを使う前に退避しておか なければなりません。
また、 shiftコマンドに引数 nを与えることにより一度に n回のシフト させることもできます。一般書式は次のようになります。
shift n引数の数(
$#
)がゼロになりこれ以上シフトできなくなった場合には
エラーメッセージ "nothing to shift" が返されます。
$0にはプログラム名(スクリプト名)が格納されています。これを使えば/usr/bin/compress の ように zcat にリンク張り、コマンド名によって処理内容を分けることもできます。