シェル変数の内容をそのまま表示するにはどうすればよいですか?

シェル変数の内容をそのまま表示するにはどうすればよいですか?

ターミナルエスケープコードを含むDebianのシェル変数の内容をそのまま見たいです。echo内容を確認しようとすると、すべての端末エスケープが端末によって解釈され、色が表示されます。

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

シェル変数の内容をそのまま印刷できますか?それとも、内容をそのまま表示するには、変数を設定する正確なスクリプトを見つける必要がありますか?

ベストアンサー1

ようにテルドン と言う、他の変数の値を使用して変数を設定した場合、その変数の元の設定を元に戻すことはできません。

しかし、少なくともBashとZshでは、端末やシェル自体で解釈されていない内容を見ることができます。

printf '%q\n' "$PS1"

これにより、他の効果を持つすべての文字がエスケープされます。これを使用して、逐語的な内容を再構成できます。

別のアプローチは、変数の内容を端末以外の場所に(直接)出力することです。

printf %s "$PS1" | od -vtc

変数の内容を文字単位で表示し、制御文字をニーモニック(、、nl... )に置き換えます。escsp

する〜いいえechoシーケンスを展開し\xて改行を追加するには、ここを使用してください。

あなたの場合

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

変数の逐語的内容である可能性がありますPS1。端末で解釈されたエスケープがなく、オプションが設定されていると仮定すると、プロンプトを表示するために使用されるときに拡張されます。しかし、拡張されたときはそうではありません。fgreset_colorpromptsubstPS1echo $PS1

おすすめ記事