Saya mencoba menggunakan printf untuk memformat beberapa output cantik dalam skrip bash
misalnya:
-----------------------
| This is some output |
-----------------------
Tetapi saya telah menemukan beberapa perilaku yang tidak saya mengerti.
$ printf "--"
memberi saya kesalahan printf: usage: printf [-v var] format [arguments]
dan
$ printf "-stuff"
menghasilkan-bash: printf: -s: invalid option
Jadi rupanya printf berpikir saya sedang mencoba untuk melewati beberapa argumen sementara saya tidak.
Sementara itu, sepenuhnya secara tidak sengaja, saya telah menemukan solusi ini:
$ printf -- "--- this works now ----\n"
beri saya--- this works now ----
Adakah yang bisa menjelaskan perilaku ini?
echo
yang akan gagal saat melakukanecho ------------
? Sebagian besar hanya mendukung-n
(tidak ada trailing baris baru),-e
(menafsirkan karakter backslash-escaped) dan mungkin-E
(JANGAN menafsirkannya) dan jangan salah ketika argumen opsi-suka lain ditemukan, bukan? (EDIT: GNU/bin/echo
juga mendukung--help
dan--version
.)Jawaban:
Yang
--
digunakan untuk memberitahu program bahwa apa pun berikut harus tidak diartikan sebagai baris perintah pilihan untukprintf
.Sunting: Jadi
printf "--"
Anda mencoba pada dasarnya berakhir sebagai "printf tanpa argumen" dan karena itu gagal.sumber
--
Anda bisa menjalankanprintf -- --
.printf --
sama denganprintf
(Anda mendapatkan pesan yang sama)printf -- $fmt
ini tidak portabel. Di busybox 1.30.1,printf -- '%s\n' hello
hasil--
. Lihat juga: pubs.opengroup.org/onlinepubs/009695399/utilities/printf.html--
sedang ditafsirkan sebagai opsi (dalam hal ini, untuk menandakan bahwa tidak ada opsi lain).String format harus selalu disertakan saat digunakan
printf
untuk mencegah interpretasi yang buruk. Untuk kasus khusus Anda:sumber
printf '-%.0s' {1..54}
--
:-)printf -- '-%.0s' {1..54}
Ada perbedaan antara printf builtin dan / usr / bin / printf, yang kedua melakukan "apa yang Anda maksudkan" tanpa kesalahan yang mengganggu ini.
sumber