Hangisi daha iyi printf veya echo?


Yanıtlar:


27

Tercih edilen ve en yaygın kullanılanlar aynı şey değildir. printfBirçok nedenden dolayı daha iyi olsa da, çoğu insan hala echosözdizimi daha basit olduğu için kullanıyor .

Tercih etmenizin ana nedenleri printf:

  1. echo standart değildir, farklı sistemlerde farklı davranır.
  2. Gerçekte ne zaman koştuğunu tahmin etmek zor echo foo. Bunu göstermek için Debian sistemimde:

    $ type -a echo
    echo is a shell builtin
    echo is /bin/echo
    

    Gördüğünüz gibi, iki farklı echokomut var, biri kabuk (bu durumda bash) yerleşik ve diğeri ayrı bir ikili. Not bashayrıca vardır printfyerleşiği ama (o işaret için @ RaduRădeanu sayesinde) daha az bir sorun olduğunu bu yüzden onun davranışı daha standardize edilmiştir.

  3. echoDestek komut satırı anahtarlarının bazı (hepsi değil) uygulamaları, a ile başlayan bir dize yazdırmak zordur -. Birçok program --anahtarların sonunu ve bağımsız değişkenlerin başlangıcını belirtmeyi desteklese de (örneğin, içerdiği grep -- -a filesatırları bulur ) . Peki, baskınız nasıl ?file-aechoecho-n

    $ echo -n           ## no output
    $ echo '-n'         ## no output
    $ echo "-n"         ## no output
    $ echo \-n          ## no output
    $ echo -e '\055n'   ## using the ASCII code works but only on implementations
    -n                  ## that support -e
    

    printf bunu kolayca yapabilir:

    $ printf -- '-n\n'
    -n
    $ printf '%s\n' -n
    -n
    $ printf '\055n\n' 
    -n
    

Neden printfdaha iyi olduğunu bilmek istediğinizden daha fazla bilgi echoiçin, http://unix.stackexchange.com adresindeki benzer bir sorunun yanıtına bakın :

/unix//a/65819/22222


1
İyi cevap verildi. Daha printfiyi bir tercüman olarak tercih etmeme yardımcı oluyor .
Pandya

3
2. noktada: Aynı şey printf(bkz. type -a) İçin de geçerlidir .
Radu Rădeanu

2
@ RaduRădeanu doğru, ancak POSIX'te printfdaha katı tanımlanmış ve bence yerleşik aynı standardı takip ediyor. POSIX gözlük için echodiğer taraftan uygulamaları ve bu arasındaki farklar olacağını az katı ve hatta açıkça devlet olan printftercih edilmelidir.
terdon

Vay. Yani kelimenin tam anlamıyla kullanmanın sıfır objektif teknik avantajı vardır echo. Bu doğru mu?
JamesTheAwesomeDude

1
@JamesTheAwesomeDude hayır, kesinlikle hiçbir teknik avantaj yok. Bunun echoyerine kullanmanın tek nedeni printf, formanın daha basit olabilmesidir. Ne yazdırdığınızı biliyorsanız echo foo, yazmaktan daha hızlı ve daha kolaydır printf 'foo\n'. Bunun dışında, bir değişkenin yazdırılması gereken komut dosyaları yazarken, kullanmak için asla iyi bir neden yoktur echo.
terdon

4

Hangisinin tercih edilebilir olduğunu sormak eksiktir.

Eğer herkes yapmak isterse, yeni satırlarla sonlandırılmış bir veya daha fazla metin satırı yayıyorsa , yankı yeterlidir. Özellikle yeni satır içermeyen bir "kısmi çizgi" dahil olmak üzere daha akıllıca bir şey amaçlanıyorsa, printf bu amaç için en iyisidir .


Uygulamaya bağlı olarak echo, "satırsonu kaçınmak" ile kolayca yapılır echo -n. Aslında, -nyankı özelliklerinin en taşınabiliridir. POSIX'e göre, SystemV'de yoktur, ancak çoğu Unice'de bulunur.
terdon

Yankılı yeni satırlardan kaçınmaya bile çalışamayacak kadar farklı birliklerde çalıştım. SCO, AIX, HP-UX ve Linux genelinde taşınabilir komut dosyaları yazmak zor ...
Monty Harder

Kesinlikle, orada tartışma yok. Söylediğim tek şey, yeni satırın en az sorun olduğu. GNU olmayan bir sisteme geçmeye çalıştığınızda tüm bahisler kapanır. Ben BSD ve SystemV güvenebilirsiniz düşünüyorum-n ama başka bir şey, hiçbir fikrim yok.
terdon
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.