次の例では、プロセスIDを含む一重引用符と二重引用符に何が起こっているのかを正確に説明できる人はいますか? [コピー]

次の例では、プロセスIDを含む一重引用符と二重引用符に何が起こっているのかを正確に説明できる人はいますか? [コピー]
[root@localhost ~]# echo $$
16991
[root@localhost ~]# bash -c "echo $$"
16991
[root@localhost ~]# bash -c "echo $$"
16991
[root@localhost ~]# bash -c 'echo $$'
21062
[root@localhost ~]# bash -c 'echo $$'
21063
[root@localhost ~]# bash -c 'echo $$'
21064
[root@localhost ~]# bash -c "echo $$"
16991

私が知る限り、一重引用符を使用するたびに新しいサブシェルが作成され、二重引用符では同じことは発生しません。なぜですか?

ベストアンサー1

要約: シェルは二重引用符で囲まれた文字列に対してパラメータ置換を実行しますが、いいえ一重引用符で囲まれた文字列。 $$はシェルPIDですが、表示される番号は次のように異なります。どのシェルがこれを評価します。

詳細: それぞれの状況を一度に一つずつ考えてみましょう。

[root@localhost ~]# echo $$
16991

16991は現在のシェルのPIDです。これをメインシェルと呼びます。

[root@localhost ~]# bash -c "echo $$"
16991

メインシェルでこれを検出すると、"echo $$"16991に置き換えられます$$。したがって、渡された文字列bash -cはですecho 16991。これが16991が印刷される理由です。

[root@localhost ~]# bash -c 'echo $$'
21062

一重引用符のため、'echo $$'デフォルトのシェルはパラメータ置換を実行しません。文字列は.21062echo $$に渡され、bash -cプロセスのPIDなので印刷されますbash -c

[root@localhost ~]# bash -c 'echo $$'
21063

次にbash -cプロセスが実行されると、今回は21063という新しいPIDがあります。

おすすめ記事