シェルでの $@ と $* の違い2014年07月06日 05時13分11秒

シェルスクリプトでの $@$* の違いはあちこちで説明されているが、自分が見やすい形のものは少ない。違いを忘れてしまったので、ついでに。

重要な違いは引数の展開のされ方。


% cat sh-args.sh
#!/bin/sh

args()
{
    echo ' =>' $#
}

echo -n '$@'
args $@
echo -n '"$@"'
args "$@"
echo -n '$*'
args $*
echo -n '"$*"'
args "$*"

引数の数を表示すると判り易い。引数の渡し方とその解釈の結果を表示する。スクリプト自体には四つの数字を三つの引数として渡す。

% sh sh-args.sh 1 2 '3 4'
$@ => 4
"$@" => 3
$* => 4
"$*" => 1

$@$* のみだと、どちらとも引数が展開さる為に、四つになる。ダブルクォートで囲んだときに、展開のされ方が変わる。

シェルスクリプト間で、何層にもわたって引数を順次渡したりする場合は、"$@" で渡すことにより本来の意味のまま渡すことが出来る。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2014/07/06/7381061/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。