web-dev-qa-db-ja.com

特別なドル記号のシェル変数とは何ですか?

Bashには、一貫した意味を持つ特別な値を保持するいくつかの変数があるようです。例えば、

./myprogram &; echo $!

myprogramをバックグラウンドとしたプロセスのPIDを返します。私は$?のような他のものを知っています。それは私が現在のTTYだと思います。他にありますか?

711
Z Douglas
  • $1$2$3、...は 定位置パラメーター です。
  • "$@"は、すべての定位置パラメーター{$1, $2, $3 ...}を配列のように構成したものです。
  • "$*"は、すべての定位置パラメーター$1 $2 $3 ...のIFS展開です。
  • $#は定位置パラメーターの数です。
  • シェルに設定されている現在のオプションの$-
  • 現在のシェルの$$ pid(サブシェルではない)。
  • $_最新のパラメータ(または起動直後に現在のシェルを起動するためのコマンドのabsパス)。
  • $IFSは(入力)フィールド区切り文字です。
  • $?は、最新のフォアグラウンドパイプライン終了ステータスです。
  • $!は、最新のバックグラウンドコマンドのPIDです。
  • $0は、シェルまたはシェルスクリプトの名前です。

上記のほとんどは、Bashリファレンスマニュアルの 特殊パラメータ にあります。シェルによって設定されたすべての 環境変数があります

包括的なインデックスについては、 Reference Manual Variable Index を参照してください。

1207
kojiro
  • $_最後のコマンドの最後の引数
  • $#現在のスクリプトに渡された引数の数
  • 文字列または区切りリストとしてスクリプトに渡される引数の$*/$@リスト

私の頭の上からGoogle bashの特殊変数.

44
Dan

$#$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
13
fedorqui

いくつかの例に注意してください。 $ 0には、プログラムの名前だけでなく、いくつかの先行パスが含まれることがあります。例えば、この2行のスクリプトを./mytry.shとして保存して実行します。

#!/bin/bash

echo "parameter 0 --> $0" ; exit 0

出力:

parameter 0 --> ./mytry.sh

これはSlackware 14.2経由のBashの現在(2016年)バージョンです。

4
Adrian Cole