Shell

如何查看 shell 變數的逐字記錄內容?

  • November 21, 2020

我想查看 Debian 上包含終端轉義碼的 shell 變數的逐字內容。如果我嘗試查看echo其內容,則所有終端轉義都會被終端解釋為例如顯示顏色。

➜  sds git:(master) echo $PS1
%(?:%{%}➜ :%{%}➜ ) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)

是否可以列印 shell 變數的逐字內容,或者我是否需要找到設置它的確切腳本才能查看其逐字內容?

正如terdon 所說,如果變數是使用其他變數的值構造的,則無法取回變數的原始構造。

但是,您至少可以在 Bash 和 Zsh 中看到它的內容,終端甚至外殼本身都無法解釋:

printf '%q\n' "$PS1"

這將轉義所有會產生不同效果的字元;您可以使用它來重建逐字記錄的內容。

另一種方法是將變數的內容輸出到終端以外的其他地方(直接);例如

printf %s "$PS1" | od -vtc

將逐個字元地顯示變數的內容,用助記符 ( nl, esc, sp…) 替換控製字元。

不要此處使用echo它會擴展\x序列並添加額外的換行符。

在你的情況下,

%(?:%{%}➜ :%{%}➜ ) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)

看起來它可能正是PS1變數的逐字內容:那裡沒有終端解釋的轉義,這些是通過fg數組和reset_color變數間接獲得的。假設promptsubst設置了該選項,則在PS1用於顯示提示時將展開這些選項,但在展開時則不會echo $PS1

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