1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bashの位置パラメータの動作確認

1
Posted at

きっかけ

bashで位置パラメータを10個以上使うときの注意を読んで、気になったので自分でもテストした結果です。

位置パラメータとは

そもそも位置パラメータとは聞き慣れないので調べました。
bashのmanによると、
$1、$2 ・・・は位置パラメータと呼ばれるものです。
$*、$@ は特殊パラメータと呼ばれます。

パラメータ (parameter) は値を保持するためのものです。
パラメータは 名前、 数字、後述の 特殊なパラメータ で挙げる特殊文字のいずれかで表現されます。
シェルでの用法においては、 変数(variable) とは 名前 で表現されたパラメータです。

位置パラメータ(Positional Parameters)
位置パラメータ (positional parameter) は、1 桁以上の数値で表されるパラメータです。
ただし 0 は含みません。

0 はコマンド名だからでしょうか。

特殊パラメータ
シェルはいくつかのパラメータを特別扱いします。
このようなパラメータは参照されるだけであり、 値を代入することは許されません。

位置パラメータのテスト

まずは、下記のコマンドをテストします。

test.sh
# !/bin/bash

echo "\$1    = [$1]"
echo "\$2    = [$2]"
echo "\$3    = [$3]"
echo "\$4    = [$4]"
echo "\$5    = [$5]"
echo "\$6    = [$6]"
echo "\$7    = [$7]"
echo "\$8    = [$8]"
echo "\$9    = [$9]"
echo "\$10   = [$10]"
echo "\$11   = [$11]"
echo "\$12   = [$12]"
echo "\${10} = [${10}]"
echo "\${11} = [${11}]"
echo "\${12} = [${12}]"

実行した結果が下記です。

$ chmod 744 test.sh
$ ./test.sh a b c d e f g h i j k l
$1    = [a]
$2    = [b]
$3    = [c]
$4    = [d]
$5    = [e]
$6    = [f]
$7    = [g]
$8    = [h]
$9    = [i]
$10   = [a0]     ※[j] と表示されてほしい
$11   = [a1]     ※[k] と表示されてほしい
$12   = [a2]     ※[l] と表示されてほしい
${10} = [j]
${11} = [k]
${12} = [l]

上記のコマンドでテストした $10は、位置パラメータ $1(中身はa) と 文字「0」 と解釈され、「a0」が表示されました。

特殊パラメータ

ついでに下記の特殊パラメータも試しました。

  • $* : 全ての位置パラメータ。"$1 $2 $3 ・・・"。パラメータの間は、変数IFSの値。
  • $@ : 全ての位置パラメータ。"$1" "$2" "$3" ・・・
test2.sh
# !/bin/sh
IFS=_
echo $*
echo "\$*   = $*"
echo "\${*} = ${*}"
echo ""
echo $@
echo "\$@   = $@"
echo "\${@} = ${@}"

実行します。

$ chmod 744 test2.sh
$ ./test2.sh a b c d e f g h i j k l
a b c d e f g h i j k l
$*   = a_b_c_d_e_f_g_h_i_j_k_l
${*} = a_b_c_d_e_f_g_h_i_j_k_l

a b c d e f g h i j k l
$@   = a b c d e f g h i j k l
${@} = a b c d e f g h i j k l

echo $* だと、変数IFSの効果が出ないようです。

最後に

知っている人は知っている知識なのでしょう。
自分で試して、知っている側になれて良かったです。
クラウドが全盛になってくると、このような知識はますます表に出てこなくなるのでしょうね。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?