lulu

【shell】位置パラメータ(positional parameters)の使い方まとめ($*, $@, $1)

やること

shellの位置パラメータ($*, $@, $1...)についてまとめる

位置パラメータとは

シェルスクリプト実行時に渡された引数を設定(展開)するパラメータ

位置パラメータの使い方の例

$1, $2...

$1のように$の後ろに数字をつけると、n番目の引数を表します。

$ cat test.sh
#!/bin/sh

echo "\$1の値は、$1"
echo "\$2の値は、$2"

$ sh test.sh lulu 222
$1の値は、lulu
$2の値は、222

$@

$の後ろに@マーク(アットマーク)をつけると、すべての引数を展開します。

$ cat test.sh
#!/bin/sh

echo $@

$ sh test.sh 11 22 33 44
11 22 33 44

$*

$の後ろに*マークをつけると、すべての引数を展開します。

$ cat test.sh 
#!/bin/sh

echo $*

$ sh test.sh 11 22 33 44
11 22 33 44

$@と$*の違い

$@と$*で同じ挙動をしましたが、内部的には以下の違いがあります。

  • $@は引数を別々の文字列として展開
    • ↑の例では、"11" "22" "33" "44"として展開される
  • $*は一つの文字列として展開される
    • ↑の例では "11 22 33 44"として展開される