Bash > 特殊な変数

更新日 2020-02-22
広告
Bashの特殊な変数について紹介します。
  • $@ -- スクリプトの引数配列
  • $数値 -- スクリプトの引数
  • $# -- スクリプトの引数の数
  • $! -- 直前に実行したプロセスのID

$@

$@は、スクリプトの引数の配列を表します。各引数は空白で連結されています。 以下のサンプル test-var.sh は、引数をそのまま出力するだけのスクリプトです。
#!/bin/bash

echo "args = $@"
実行してみます。
test-special-var$ bash test-var.sh a b c
args = a b c

$数値

$数値は、スクリプトの引数の1つを表します。 どの引数を指定するかは、数値で決まります。 $0は、スクリプトの実行パスを表します。

例えば、以下のサンプル test-var2.sh は、$0から$3までを出力するだけのスクリプトです。

#!/bin/bash

echo "arg[0] = $0"
echo "arg[1] = $1"
echo "arg[2] = $2"
echo "arg[3] = $3"
これを、aとbという引数を与えて実行してみます。
test-special-var$ bash test-var2.sh a b 
arg[0] = test-var2.sh
arg[1] = a
arg[2] = b
arg[3] = 

引数は2つなので、$3は空白になっています。

また、$0は、実行時に指定したスクリプトのパスである点に注意してください。 例えば、同じtest-var2.shでも、以下のように実行すると、さっきとは$0の値が異なる結果になります。

test-special-var$ bash ../test-special-var/test-var2.sh a b
arg[0] = ../test-special-var/test-var2.sh
arg[1] = a
arg[2] = b
arg[3] = 

$#

変数'$#'には、引数の数が格納されています。 この変数を使うことで、引数の数が想定通りかチェックできます。 以下がサンプルコードです。
if [ $# -eq 0 ];then
   echo "no arguments"
fi
このサンプルは、引数の数が0であれば、メッセージを出力します。

$!

$! には、直前に実行したプロセスのプロセスIDが格納されています。 例えば、以下のようにすると、JavaプログラムのプロセスIDを出力できます。
#!/bin/bash

java test.sample.MyApp &

pid=$!
echo $pid
プロセスIDを覚えておけば、あとで kill することもできます。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system