echo
echo
Tek 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 -n
veya 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, -n
bu 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 . \c
Argü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 bash
kabuk tipik gelmez değil şartnameye uygun ve kolları -n
belirsiz 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 echo
yerleşik gerektirmeden, varsayılan olarak ters eğik çizgi bulunan karakterleri genişletmek -e
seçeneği. Bu setler varsayılan değeri xpg_echo
Kabuk seçeneği on
Bash yapar, echo
daha Tekli Unix Şartnamede belirlenen sürümü, sürüm 3. Bkz gibi davranacaksan Bash Yerleşikleri kaçış dizilerinin açıklaması için, echo
tanır.
printf
Öte yandan, printf
davranışları karşılaştırıldığında oldukça evcildir.
GEREKÇE
Bu printf
yardı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, printf
Dokuzuncu 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 %b
yte dizgileri veya değişmez %s
harfleri vardır. %f
İlk argümandaki ormatlardan başka, en çok %b
yte string argümanı gibi davranır, bunun dışında kaçışa cevap vermemesi \c
dışındadır.
printf ^%b%s$ '\n' '\n' '\t' '\t'
^
\n$^ \t$
Neden daha printf
iyi 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 ... \n
Son 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
echo
zorunlu? kullanabilirsinizprintf
.