$
Bashで(ドル記号)で始まるいくつかの特別なパラメータが見つかりました。
たとえば、終了ステータスを知りたいときに$?
プロセスIDを取得するには、を使用しました。$$
。
特別なBash(シェル)パラメータと使用法は何ですか?
答え1
引用する3.4.2 特殊パラメータ~からバッシュリファレンスマニュアル。
特殊パラメータ:
*
(
$*
)は1から始まる位置引数に拡張されます。拡張が二重引用符内にない場合、各位置引数は別々の単語に展開されます。これらの単語は、実行されるコンテキストで単語分割とパス名拡張がさらに適用されます。二重引用符内で拡張が発生すると、単一の単語に展開され、各引数の値はIFS
特殊変数の最初の文字で区切られます。つまり、次の"$*"
ようになります。"$1c$2c…"
氏変数 value の最初の文字ですIFS
。設定しないと、IFS
パラメータはスペースで区切られます。 nullの場合、IFS
パラメータは区切り文字を挿入せずに連結されます。
@
(
$@
)は1から始まる位置引数に拡張されます。二重引用符内で拡張が発生すると、各引数は別々の単語に展開されます。つまり、"$@"
と同じです"$1" "$2" …
。単語内で二重引用符拡張が発生すると、最初の引数の拡張は元の単語の先頭に関連付けられ、最後の引数の拡張は元の単語の最後の部分に関連付けられます。位置引数がない場合、"$@"
拡張は$@
空です(つまり削除されます)。
#
(
$#
)は、小数点位置引数の数に拡張されます。
?
(
$?
)は、最後に実行された前景パイプの終了状態に拡張されます。
-
(
$-
ハイフン)呼び出し時に、指定された現在のオプションフラグ、組み込みコマンド、またはシェルset
自体によって設定されたオプションフラグ(オプションなど)に展開されます-i
。
$
(
$$
)はシェルのプロセスIDに展開されます。サブシェルでは、サブシェルで()
はなく呼び出しシェルのプロセスIDに展開されます。
!
()は、非同期コマンドで実行されているのか組み込みコマンドを
$!
使用しても、最後にバックグラウンドに入れたジョブのプロセスIDに展開されます(参照:bg
ジョブ制御内蔵)。
0
(
$0
)はシェルまたはシェルスクリプトの名前に展開されます。これはシェルが初期化されるときに設定されます。コマンドファイルを使用してBashを呼び出す(参照)シェルスクリプト)、$0
ファイル名に設定します。 Bashがこのオプションで始まる-c
(参照バッシュに電話する)$0
実行される文字列の後の最初の引数(存在する場合)に設定されます。それ以外の場合は、引数0で指定されたようにBashを呼び出すために使用されるファイル名に設定されます。
これはBashのマニュアルページでも印刷できます。
$ man bash | awk '/Special Parameters$/','/Shell Variables$/'
同じ上記とPOSIXで定義された特殊パラメータ。
また、シェルまたは現在の関数のコマンドラインパラメータを含む位置パラメータ$1
、、、...があります($2
3.4.1 位置パラメータ)。これはPOSIX機能でもあります。
以前のバージョンのBashも$_
特別なパラメータとしてリストされていましたが、今ではシェルで設定した他の変数と一緒にリストされます(5.2 バッシュ変数)。$_
POSIXではなく、他のシェルはそれをサポートしていない可能性があります。
_
(
$_
、下線。)シェルが起動したら、環境または引数リストに渡されたシェルを呼び出すために使用される絶対パス名または実行中のシェルスクリプトに設定します。その後、拡張後、前のコマンドの最後の引数に展開されます。また、実行された各コマンドを呼び出し、そのコマンドにエクスポートされた環境にデプロイするために使用されるフルパス名に設定されます。メールを確認すると、このパラメーターにはメールファイルの名前が保持されます。
答え2
~によるとBash スクリプトガイド。
プロセスID(PID)スクリプト自体。 $$変数は、「固有の」一時ファイル名を設定するためにスクリプトでよく使用されます。echo $$
スクリプト内で実行すると、出力に現在のシェルとは異なるPIDがあることがわかります。