このコマンドを入力すると、プロンプトが私のディレクトリに変わるのはなぜですか?
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
)が含まれている場合は、プロンプトが印刷されるたびに評価され、実際のディレクトリが表示されます。