Shell

環境變數前的含義

  • October 16, 2014

在我使用的舊 Solaris 機器上的 ksh 中:

export PS1="$PWD $"

將提示設置為目前目錄。它工作得很好,直到你在其他地方 cd,然後你看到它不是每次都評估 PWD。我注意到它是通過像這樣設置 PS1 來解決的:

export PS1="\$PWD $"

只是好奇它叫什麼,它是如何工作的,其他應用程序等等。(這是對Google搜尋非常抗拒的東西之一。)

一些文件將有助於解釋這一點。

來自shell 的 POSIX 標准文件

以下變數會影響 shell 的執行:

PS1:每次互動式 shell 準備好讀取命令時,該變數的值應進行參數擴展並寫入標準錯誤。

單引號

用單引號括起來的字元應保留單引號內每個字元的字面值。

引號 將字元括在雙引號中應保留雙引號內所有字元的字面值,但

$ 除外:美元符號應保留其引入參數擴展的特殊含義

轉義字元(反斜杠)

未引用的反斜杠應保留下一個字元的文字值。

所以 PS1 的值受參數擴展的影響,這就是你想要的,所以$PWD每次得到提示時都會評估。這意味著 PS1 的值中需要有一個實際的$PWD字元串。但,

export PS1="$PWD $ "

在導出語句執行時將PWD 的值放入 PS1。PS1 將類似於/home/poldie $,之後將永遠不會改變。你不想要那個。

export PS1="\$PWD $ "

反斜杠將引用$,以便 PS1 包含文字字元串$PWD $。你要這個。

export PS1='$PWD $ '

會做同樣的事情。用單引號括起來的參數不展開。

引用自:https://unix.stackexchange.com/questions/162545