私はタイプミスを作成し、bashスクリプトに$$(エコーの引数として)を書きました。数字(1979)が印刷されます。私はこれを何度も試しましたが、同じ数字を印刷したので、これはUnixの時代と関係があると思いました。 bashのマニュアルやインターネットでこれに関する情報が見つかりませんでした。その後、デフォルトのshを試してみましたが、別の番号5755が印刷され、新しいshを閉じて開いたときに少し異なる番号が印刷されました。
この変数には何が必要ですか?この数字はどういう意味ですか?
答え1
多くの特殊なシェル変数の一つです。 ~からPOSIX規格これに関連する:
$
呼び出しシェルの10進プロセスIDに展開されます。サブシェル(参照)シェル実行環境)、
$
現在のシェルと同じ値に拡張する必要があります。
他の特殊なシェル変数には、!
(最も最近開始されたバックグラウンドジョブのPID)、?
(最も最近終了したジョブの終了状態)、#
(位置引数の数) 、(位置引数、*
単一文字列で連結)、@
(位置引数、として含まれています リスト) , -
(現在のシェルオプション) と0
(0, シェルまたはスクリプトの名前).
また、bash
マニュアルの「特殊パラメータ」セクションで:
$
シェルのプロセスIDに展開されます。サブシェルでは、
()
サブシェルではなく現在のシェルのプロセスIDに展開されます。
他のシェルのマニュアルにも同様のフレーズがあります。
つまり、$
入力を通じて値を取得した変数は、$$
現在のシェルプロセスのプロセスID(PID)を保持します。
次のように再確認できます。
% echo "$$"
85776
% ps -p "$$"
PID TT STAT TIME COMMAND
85776 p1 SN 0:00.19 -zsh (zsh)
これは、私の特定のシェルプロセスが85776に拡張され、このPIDが私が使用しているログインシェルと$$
一致することを示しています。zsh
答え2
この変数は、現在のシェルのPID、つまりプロセスIDを表示します。与えられたシェルでこの変数をエコー(またはアクセス)するたびに同じです。新しいシェル(またはサブシェル)を起動してアクセスするたびに、元のシェルとは異なります。