PS1 = '$(pwd)'これがうまくいくのはなぜですか?これがPS1 = $(pwd)と異なるのはなぜですか?

PS1 = '$(pwd)'これがうまくいくのはなぜですか?これがPS1 = $(pwd)と異なるのはなぜですか?

このコマンドを入力すると、プロンプトが私のディレクトリに変わるのはなぜですか?

PS1='$(pwd)'

私は補間がないことを意味する一重引用符を使用します。つまりecho '$(pwd)'--→$(pwd)

また、これがうまくいく理由を明確にすると仮定すると、なぜ動作が異なりますかPS1=$(pwd)? (引用は全くありません)

つまり、引用符を使用すると、端末をブラウズするときにプロンプ​​トが現在のディレクトリに変わり続けます。ただし、引用符を使用しない場合、プロンプトは常にコマンドを最初に入力したときにあったディレクトリに残ります。PS1=$(pwd)

なぜ?

ベストアンサー1

単に変数に値を割り当てると、$(...)一重引用符で囲まれていないか、バックスラッシュでエスケープされない限り、式が評価されます。理解するには、次の2つを比較してください。

A=$(pwd)
echo "$A"
B='$(pwd)'
echo "$B"

値はAすぐに文字列になります/home/yourusername。明らかに、この文字列がどこから来たのか覚えておらず、ディレクトリを変更しても同じままです。ただし、値はBリテラル文字列になり、$(pwd)解釈されません。

これでPS1特別なことが起こります。プロンプトが印刷されるたびに、いくつかの特別な構成が解釈されます。たとえば、コマンドの置き換えは、上記の変数割り当て$(...)に対して行われたのと同じ方法で行われますA。明らかに、PS1ホームディレクトリのリテラル文字列(上記のようなA)を含めると変更できません。ただし、文字列$(pwd)(上記と同じB)が含まれている場合は、プロンプトが印刷されるたびに評価され、実際のディレクトリが表示されます。

おすすめ記事