次のスクリプトは予期しない出力を生成しました:
printf "escaped slash: \\ \n"
printf "2 escaped slashes: \\\\ \n"
printf "3 escaped slashes: \\\\\\ \n"
printf "4 escaped slashes: \\\\\\\\ \n"
Ubuntu 14でbashスクリプトとして実行します。
escaped slash: \
2 escaped slashes: \
3 escaped slashes: \\
4 escaped slashes: \\
エラー。何ですか?
printf
FORMAT
文字列が二重引用符で囲まれていると仮定すると、printf
は、たとえば、 echo
(どちらもシェル組み込みコマンドです)。
printf
に期待することは、実際には単一引用符を使用して実現できます。
printf '1 escaped slash: \\ \n'
printf '2 escaped slashes: \\\\ \n'
printf '3 escaped slashes: \\\\\\ \n'
printf '4 escaped slashes: \\\\\\\\ \n'
出力:
1 escaped slash: \
2 escaped slashes: \\
3 escaped slashes: \\\
4 escaped slashes: \\\\
printf
はbashビルトインです。 help printf
を見てください。
printf [-v var] format [arguments] FORMATの制御下でARGUMENTSをフォーマットして出力します。
形式と引数を渡す必要があります。したがって、引数の前に"%s\n"
という形式を追加します。
printf "%s\n" "escaped slash: \\"
printf "%s\n" "2 escaped slashes: \\\\"
printf "%s\n" "3 escaped slashes: \\\\\\"
printf "%s\n" "4 escaped slashes: \\\\\\\\"
出力:
エスケープスラッシュ:\ 2エスケープスラッシュ:\\ 3エスケープスラッシュ:\\\ 4エスケープスラッシュ:\\\\