Printf içindeki kısa çizgiler


37

Bir bash betiğinde bazı güzel çıktıları biçimlendirmek için printf kullanmaya çalışıyorum

Örneğin:
-----------------------
| This is some output |
-----------------------

Ama anlamadığım bazı davranışlar yüzünden tökezledim.

$ printf "--" bana hata veriyor printf: usage: printf [-v var] format [arguments]

ve $ printf "-stuff"sonuçları-bash: printf: -s: invalid option

Yani görünüşe göre printf, ben değilken bazı argümanları iletmeye çalıştığımı düşünüyor.

Bu arada, tamamen kaza eseri bu geçici çözümü buldum:
$ printf -- "--- this works now ----\n"bana verir--- this works now ----

Birisi bu davranışı açıklayabilir mi?



Interetet dışında, echobunu yaparken başarısız olacağını herhangi bir uygulamaları var echo ------------mı? Sadece tek destek -n(takip eden yeni satır yok), -e(ters eğik çizgiden kaçan karakterleri yorumla) ve mümkün -E(bunları yorumlamayın) ve diğer seçenek benzeri argümanlarla karşılaşıldığında hata yapmazsınız, değil mi? (EDIT: /bin/echo--help--version
GNU'lar

Yanıtlar:


44

--Ne olursa olsun aşağıdaki gerektiğini programı anlatmak için kullanılır değil bir komut satırı olarak yorumlanabilir seçeneği için printf.

Düzenleme: Böylece printf "--"temelde "hiçbir argüman olmadan printf" olarak sona erdi ve bu nedenle başarısız oldu.


18
Başka bir deyişle, yazdırmak --için çalıştırabilirsiniz printf -- --.
l0b0

2
... printf --aynıdır printf(aynı mesajı alırsınız)
Peter.O

25

-- bir seçenek olarak yorumlanıyor (bu durumda, daha fazla seçenek olmadığını belirtmek için).

Kötü yorumlamayı önlemek için kullanırken bir format dizesi daima dahil edilmelidir printf. Özel durumunuz için:

printf '%s\n' '-----------------------'

Bunu bir sıra ile yapmanız gerektiğinde ne olacak? printf '-%.0s' {1..54}
qodeninja

2
@qodeninja Sonra aslında yapmak , kullanmak istediğiniz --:-)printf -- '-%.0s' {1..54}
Chris Aşağı

4

Printf builtin ve / usr / bin / printf arasında farklılıklar vardır, ikincisi bu sinir bozucu hatalar olmadan "ne demek istediğinizi" yapar.

printf "-----"             # error
printf -- "-----"          # ok
/usr/bin/printf "-----"    # ok
/usr/bin/printf -- "-----" # ok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.