私はあちこちを歩き回り、echo
同様のことを試していますecho ~
。代替環境変数を使用しようとしたときに$
誤ってecho $$
。驚くべきことに、空白行の代わりに6桁の数字が表示されます269523
。同じコマンドを続行しますが、数値は変更されません。ところが数時間後に試してみると番号が変わったのですが、まだ6桁の数字でした。どういう意味ですかecho $$
?$
環境変数に関して特別な意味を持つ他の同様の文字はありますか?
ベストアンサー1
Bourneとcshのようなシェル(and perl
)は、$
シェルインタプリタを実行しているプロセスのIDに拡張される特別な引数です。$$
このパラメータの値を拡張するために使用されるパラメータ拡張構文も同様です。
この文字は、少なくともページャの検索構文の特殊文字であり(通常はページが埋め込まれたマニュアルページで使用されます)、ドキュメント内のどこでも見つけることができる$
ため、ドキュメントを見つけるのは簡単ではありません。info
less
$
zsh
マニュアルでは、次のことができます。Shellが設定したパラメータ部分( info -n 'Parameters Set By The Shell' zsh
):
$
このシェルのプロセスID。これは、zsh を呼び出して開始された元のシェルを意味します。 (...)で始まるサブシェルなど、新しいプログラムを実行しないシェルから分岐したすべてのプロセスは、同じ値に置き換えられます。
バッシュマニュアルでは、特殊パラメータ部分:
'$'
($$
)はシェルのプロセスIDに展開されます。 「()」サブシェルは、サブシェルではなく呼び出しシェルのプロセスIDに展開されます。
zsh と bash の両方のマニュアルには、索引項目 (ほとんどの特殊変数およびパラメーターを含む) が含まれているため、次の方法でアクセスできます。
info zsh '$'
info bash '$'
echo
どちらも指摘したように、コマンドを解釈(または実行)したecho $$
シェルプロセスのpidは必ずしも必要ではありません。これを行うには、BASHPID
bashとzsh$sysparam[pid]
の特殊変数を参照してください。
zshではなくBourneに似たシェルでは、次のことを行う必要があります。
echo "$$"
따옴표가 없는 경우와 마찬가지로 echo $$
분할+글로브 연산자를 호출하는 특수 구문이 있지만 여기서는 필요하지 않습니다. 그러나 실제로 $IFS
는 숫자를 포함하는 경우에만 차이를 확인할 수 있습니다.
bash-5.0$ echo $$ "$$"
33664 33664
bash-5.0$ IFS=6
bash-5.0$ echo $$ "$$"
33 4 33664