環境変数の前の\の意味

環境変数の前の\の意味

以前の Solaris システムの ksh では、以下を使用しました。

export PS1="$PWD $"

プロンプトを現在のディレクトリに設定します。他の場所でCDを使用するまではうまくいきますが、毎回PWDを評価しないことがわかります。 PS1を次のように設定すると、問題が解決したことがわかりました。

export PS1="\$PWD $"

名前が何であるか、どのように機能するか、他のアプリケーションなどが気になります。 (これはGoogleが難しいことの1つです。)

ベストアンサー1

一部の文書はこれを説明するのに役立ちます。

~からシェル用POSIX標準ドキュメント:

次の変数はシェルの実行に影響します。
PS1:対話型シェルがコマンドを読み取る準備ができたときはいつでも、この変数の値はパラメータ拡張され、標準エラーに書き込まれます。
...
一重引用符
一重引用符で囲まれた文字は、一重引用符内の各文字のリテラル値を保持する必要があります。
...
二重引用符
二重引用符で囲まれた文字は、$を除いて二重引用符内のすべての文字のリテラル値を保持する必要があります。
ドル記号はパラメータ拡張を導入するための特別な意味を維持する必要があります
...
エスケープ文字(バックスラッシュ)
は追加されません。引用符付きバックスラッシュは、次の文字のリテラル値を保持する必要があります。

So値はPS1目的のパラメータ拡張に依存するため、プロンプトが表示さ$PWDれるたびに評価されます。これは$PWD、値に実際の文字列が含まれていることを意味しますPS1。しかし、

PS1="$PWD $ "

価値を置きますPWD 割り当て文を実行するとき入力するPS1PS1これからもそうだろうし決して/home/poldie $ 変わらないだろう。あなたはこれをしたくありません。

PS1="\$PWD $ "

バックスラッシュはリテラル文字列を含める$ために引用されています。あなたはこれが欲しいです。PS1$PWD $

PS1='$PWD $ '

同じことをします。パラメータを一重引用符で囲んでも拡張されません。

export(注:OPがステートメントとして作成することを選択したので、もともとこれをすべてステートメントとして作成しました。@Kusalanandaはこれをexport削除しました。理由はわかりません。:sh保存するプロンプトを定義します。)

おすすめ記事