echo
echoTek Unix Spesifikasyonuna kesinlikle uyan bir uygulama, aşağıdakileri yaparsanız yeni satırlar ekleyecektir:
echo 'line1\nline2'
Ancak bu güvenilir bir davranış değildir. Aslında, orada gerçekten değil Eğer bekleyebilirsiniz herhangi bir standart davranış echo.
işlenenler
string
Standart çıktıya yazılacak bir dize. İlk işlenen ise -nveya işlenenlerden herhangi biri bir < \ters eğik çizgi> karakteri içeriyorsa , sonuçlar uygulama tarafından tanımlanır .
On XSI conformant ilk işlenen ise sistemlerin, -nbu bir dize olarak ele alınacaktır bir seçenek değil . Aşağıdaki karakter dizileri, herhangi bir argümandaki XSI uyumlu sistemlerde tanınır:
\a- Bir <alert> yazın .
\b- Bir <backspace> yazın .
\c- Aksi halde çıktıdaki son argümanı izleyen <newline> işaretini kaldırın . \cArgümanları takip eden tüm karakterler göz ardı edilir.
\f- Bir <biçim beslemesi> yazın .
\n- Bir <newline> yazın .
\r- Bir <araba-dönüş> yazın .
\t- Bir <tab> yazın .
\v- <vertical-tab> yazın .
\\- Bir <backslash> karakteri yazın.
\0num- Sıfır, bir, iki veya üç basamaklı sekizlik sayı olan 8 bitlik bir değer yazın num.
Ve bu nedenle, yeni bir satır yazmayı bilmenin genel bir yolu yoktur echo, ancak genel olarak sadece bunu yapmakta güvenebilirsiniz echo.
Bir bashkabuk tipik gelmez değil şartnameye uygun ve kolları -nbelirsiz olduğunu bile ve diğer seçenekleri ama. Yapabilirsin:
shopt -s xpg_echo
echo hey\\nthere
hey
there
Yapma zamanı seçeneğiyle oluşturulmuşsa , bu gerekli de değilbash ...
--enable-xpg-echo-default
Make echoyerleşik gerektirmeden, varsayılan olarak ters eğik çizgi bulunan karakterleri genişletmek -eseçeneği. Bu setler varsayılan değeri xpg_echoKabuk seçeneği onBash yapar, echodaha Tekli Unix Şartnamede belirlenen sürümü, sürüm 3. Bkz gibi davranacaksan Bash Yerleşikleri kaçış dizilerinin açıklaması için, echotanır.
printf
Öte yandan, printfdavranışları karşılaştırıldığında oldukça evcildir.
GEREKÇE
Bu printfyardımcı program, tarihsel olarak sağlanan işlevselliği sağlamak için eklenmiştir echo. Bununla birlikte, mevcut çeşitli versiyonlarındaki uzlaşmaz farklar nedeniyle echo, versiyonun özellikleri, printfDokuzuncu Baskı sistemindeki birine dayanan bu yeni yardımcı programa bırakılarak, birkaç özel özelliğe sahiptir .
EXTENDED DESCRIPTION bölümü printf(), XBD Dosya Formatı Notasyonu'ndaki dosya formatı notasyonu ile açıklandığı halde, neredeyse ISO C standardındaki fonksiyonla tam olarak eşleşir .
Argümanlarını tanımlayan format dizgilerini kullanır - ki bunlar herhangi bir sayıda şey olabilir, ancak dizgiler için ya %byte dizgileri veya değişmez %sharfleri vardır. %fİlk argümandaki ormatlardan başka, en çok %byte string argümanı gibi davranır, bunun dışında kaçışa cevap vermemesi \cdışındadır.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Neden daha printfiyi olduğunuecho görün ? daha fazlası için.
echo() printf
Kendi standartlarını şöyle yazabilirsin echo...
echo(){
printf '%b ' "$@\n\c"
}
... hemen hemen her zaman otomatik olarak doğru olanı yapmalı.
Aslında, hayır ... \nSon argüman tek bir <backslashes> sayısıyla bitiyorsa, bu, argümanların kuyruğunda değişmez bir yazı oluşturur .
Ama bu değil:
echo()
case ${IFS- } in
(\ *) printf %b\\n "$*";;
(*) IFS=\ $IFS
printf %b\\n "$*"
IFS=${IFS#?}
esac
echozorunlu? kullanabilirsinizprintf.