文字列にバックスラッシュがある場合は、printfを使用してください。

文字列にバックスラッシュがある場合は、printfを使用してください。

設定の変数printfと変数の両方を試していますが、試したことはすべてエラーを返すか、プロンプトにテキストを入力します。exportPS1printf\u

v='\u\$'; printf "$v"; export PS1="$v"
-bash: printf: missing unicode digit for \u

v='\\u\$'; printf "$v"; export PS1="$v"
\u$

v=$'\u'; v+='\$'; printf "${v}"; export PS1="${v}"
-bash: printf: missing unicode digit for \u

両方の操作を$v実行できる書式設定方法はありますか?printfexport

ベストアンサー1

printf最初の引数の一部のバックスラッシュ文字は特殊文字として解釈されるため失敗します。

printf一般的に言えば、力を使うとき

  1. 他のパラメータから取得する必要があるデータのプレースホルダを含むことができる静的型文字列
  2. 静的書式文字列のプレースホルダに使用される追加の変数データ。

これは最初のパラメータprintfですいつも一重引用符で囲まれた文字列。

%sシェルでは、左/右のパディングなどが必要ない場合(たとえば、%20s右揃え文字列または左揃え文字列文字に%-20s20を使用)など、書式設定された文字列のほとんどすべての項目のプレースホルダとして使用できます。浮動小数点数の小数桁(%.3f小数点3桁)または整数のゼロパディング(%08d小数点8桁)など

たとえば、文字列を印刷するには、%s書式文字列内で次を使用します。

v='\u\$'
printf 'PS1 will be set to "%s"\n' "$v"   # or just:  printf '%s\n' "$v"
PS1="$v"

または

PS1='\u\$'
printf 'PS1 was set to "%s"\n' "$PS1"   # or just:  printf '%s\n' "$PS1"

これは出力されます

PS1 will be set to "\u\$"

そして

PS1 was set to "\u\$"

システムのprintf(1)および/または(および)を参照してください。printf(3)man 1 printfman 3 printf


また、PS1エクスポートは必要ありません。

おすすめ記事