
printf
変数の印刷に使用したいです。変数には%
パーセント記号を含めることができます。
最小限の例:
$ TEST="contains % percent"
$ echo "${TEST}"
contains % percent
$ printf "${TEST}\n"
bash: printf: `p': invalid format character
contains $
(echo
希望の出力を提供します。)
答え1
printf
一般的な形式で使用:
printf '%s\n' "${TEST}"
からman printf
:
SYNOPSIS printf FORMAT [ARGUMENT]...
あなたはする必要がありますいいえエラーとセキュリティホールが発生する可能性があるため、変数をFORMAT文字列に渡してください。
ところで:
%
形式の一部として記号を使用するには、記号を入力する必要があります%%
。たとえば、次のようになります。
$ printf '%d%%\n' 100
100%
答え2
与えられたフォーマット文字列に変数の内容を入れないでくださいprintf
。代わりにこれを使用してください:
printf '%s\n' "${TEST}"
答え3
printf
保証されたパラメータを許可し、渡された内容に応じてさまざまな追加パラメータを許可します。だからこんな感じ:
printf '%07.2f' 5
になる:
0005.00
最初のパラメータは " format
"と呼ばれ、常に存在します。文字列が含まれていない場合は、%
単に印刷されます。したがって:
printf Hello
簡単に作成してください(デフォルトモードでは末尾の改行が追加されないことに注意する価値がありますHello
)。echo
例はうまくいくと予想しましたが、sなしで文字列だけを渡したため、以前は(無意識のうちに)それを乱用していたという事実によってすでに誤解されています%
。交換する必要がないため、機能は同じです。format
printf
echo -ne
あなたがこれをしたいなら正しいprintf
、組み込みの代替関数を使用して印刷可能な文字列を形成できます。私のコードには、次の行が表示されます。
printf '%20s: %6d %05d.%02d%%' "$key" $val $((val/max)) $((val*100/max%100))
今やっていることがうまく機能するには、echo -ne
次のようなものが必要です。
TEST="contains % percent"
echo -ne "${TEST}\n"
\
これは、解釈可能な変数の内部エスケープに対する(問題となる)動作を保存します。提供してから背面を貼る-n
のも少し愚かなように見えますが、\n
現在行っているすべての作業に適用できるグローバル検索と置換なので提供します。それでも変数でエスケープ操作を実行するよりクリーンなバージョンは\
次のとおりです。
TEST="contains % percent"
echo -e "$TEST"