Bashには、一貫した意味を持つ特別な値を保持するいくつかの変数があるようです。例えば、
./myprogram &; echo $!
myprogram
をバックグラウンドとしたプロセスのPIDを返します。私は$?
のような他のものを知っています。それは私が現在のTTYだと思います。他にありますか?
$1
、$2
、$3
、...は 定位置パラメーター です。"$@"
は、すべての定位置パラメーター{$1, $2, $3 ...}
を配列のように構成したものです。"$*"
は、すべての定位置パラメーター$1 $2 $3 ...
のIFS展開です。$#
は定位置パラメーターの数です。$-
。$$
pid(サブシェルではない)。$_
最新のパラメータ(または起動直後に現在のシェルを起動するためのコマンドのabsパス)。$IFS
は(入力)フィールド区切り文字です。$?
は、最新のフォアグラウンドパイプライン終了ステータスです。$!
は、最新のバックグラウンドコマンドのPIDです。$0
は、シェルまたはシェルスクリプトの名前です。上記のほとんどは、Bashリファレンスマニュアルの 特殊パラメータ にあります。シェルによって設定されたすべての 環境変数があります 。
包括的なインデックスについては、 Reference Manual Variable Index を参照してください。
$_
最後のコマンドの最後の引数$#
現在のスクリプトに渡された引数の数$*
/$@
リスト私の頭の上からGoogle bashの特殊変数.
$#
、$0
、および$1
、...、$n
の動作を理解しやすくするために、このスクリプトを使用します。
#!/bin/bash
for ((i=0; i<=$#; i++)); do
echo "parameter $i --> ${!i}"
done
実行すると代表的な出力が返されます。
$ ./myparams.sh "hello" "how are you" "i am fine"
parameter 0 --> myparams.sh
parameter 1 --> hello
parameter 2 --> how are you
parameter 3 --> i am fine
いくつかの例に注意してください。 $ 0には、プログラムの名前だけでなく、いくつかの先行パスが含まれることがあります。例えば、この2行のスクリプトを./mytry.shとして保存して実行します。
#!/bin/bash
echo "parameter 0 --> $0" ; exit 0
出力:
parameter 0 --> ./mytry.sh
これはSlackware 14.2経由のBashの現在(2016年)バージョンです。