2012-07-17 11 views
12

Şu anda mümkün olduğunca taşınabilir olması gereken bir bash sınama çerçevesi yazıyorum.Daha taşınabilir nedir? echo -e veya printf kullanıyor musunuz?

Yani, bir noktada, birçok genişletilmiş değişken içeren bazı metinleri takip eden bir yeni satır yazdırmak zorunda kaldım. Bu benim kullandığım çözüm.

echo -e "\n$number_of_specs ${units}, $number_of_specs_failed failed" 

tamam görünüyor ama mesela kullanarak çizgiyi yazdırmadan karşılaştırılır ne kadar taşınabilir emin değilim printf?

Bazı referansları bulabileceğim herhangi bir fikir veya ipucu?

+3

olduğunu , çeşitli kabuklar (bash değil anlamına gelir) veya çeşitli bash versiyonları arasında taşınabilir mi demek istiyorsunuz? –

+1

Bir bash sınama çerçevesinin bash ile bir şeyle nasıl uyumlu olması gerektiği açık değil. Sanırım belki de bazı OS'lerin baskısı yok, ve gerçekten de bash'ın bir parçası değil, ama uyumsuzluklar sağlıyor mu? Autoconf ve ./configure uygulamasında ne kadar uyumluluk maliyetine baktınız mı? Neden sadece bazı testler değil, eğer [[! -f/bin/printf]]; echo -e "lütfen bu betiğin geri kalanını çalıştırmadan önce printf yüklü"; fi '?? İyi şanslar. – shellter

+2

printf'in teknik olarak hala daha taşınabilir olduğunu düşünüyorum çünkü varsayılan 'xpg_echo' davranışı Bash içindeki platformlar arasında değişebilir (böylece gerçekten istediyseniz açıkça ayarlayabilirsiniz) – ormaaj

cevap

20

printf daha taşınabilir. Her zaman echo -e üzerinden tercih edilmelidir. Özellikle bash/zsh/ksh hedefleniyorsa, echo $'...' da tamam. Özel olarak zsh veya ksh hedefleniyorsa, print tamam. http://www.in-ulm.de/~mascheck/various/echo+printf/

  • http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html#tag_20_37_16
  • POSIX'deki (son halkası) http://cfajohnson.com/shell/cus-faq.html#Q0b

    • ayrıca kaçınılmalıdır echo -n sorunları tartışır. Temelde, echo için seçenekleri kullanın ve taşınabilirlik, printf için asla.)

  • +2

    +1 iyi yanıt. – jordanm

    1

    lider satırbaşıyla için çözelti) printf olmadan antik sistemlerine taşınabilirlik açısından (en taşınabilir açıkçası 'taşınabilir' By

    echo 
    echo "$number_of_specs ${units}, $number_of_specs_failed failed" 
    
    İlgili konular