Shell
如何查看 shell 變數的逐字記錄內容?
我想查看 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
。