İstediğin her şeyi yönlendirebilirsin echo
ama onunla hiçbir şey yapmaz. echo
standart girişini okumuyor. Tek yaptığı standart çıktıya boşluk karakteriyle ayrılmış ve yeni satır karakteriyle sonlandırılmış argümanlarını yazmaktır (ve içlerinde echo
bazı kaçış dizileri bulunan bazı uygulamalar ve / veya -
olasılıkla seçenek olarak başlayan argümanlar ile ).
İsterseniz echo
bir dosyanın içeriğini görüntülemek için, size bir argüman olarak bu içeriği geçmek zorunda echo
. Gibi bir şey:
echo "$(cat my_file.txt)"
Not $(...)
arka satır karakteri şeritler s bu çıkışından cat
komut ve echo
ekler , bir arka.
Ayrıca, haricinde zsh
, NUL karakterlerini bir komutun argümanlarında geçiremeyeceğinize dikkat edin , böylece yukarıdaki genellikle ikili dosyalarla çalışmaz. yash
geçerli karakterlerin bir parçasını oluşturmayan baytları da kaldıracaktır.
İstediğiniz çünkü bunu yapmak isteyen nedeni ise echo
genişletmek için \n
, \b
, \0351
(UNIX conformant olarak ... dosyasındaki kaçış dizileri echo
uygulamaları yapmak ama hepsi değil ), sonra sen yerine kullanmayı tercih printf
yerine :
printf '%b\n' "$(cat my_file.txt)"
Aksine echo
, bu dosya taşınabilir ve dosyanın içeriği ile başlarsa sorun yaşamayacaksınız -
.
Bir alternatif olarak $(cat file)
, birlikte ksh
, zsh
ve bash
bir de yapabilirsiniz:$(<file)
. Bu , genişletmeyi yapmak için dosyanın içeriğini okumak yerine kabuğun bulunduğu özel bir cat
işleçtir. Hala sondaki yeni satırları çıkarır ve dışında NUL baytlarında boğulur zsh
. Içinde bash
, bu hala fazladan bir işlem çatal. Ayrıca, farkın bir türünün bu şekilde bir tür dizin dosyasını okumaya çalışırken herhangi bir hata almayacağınız olduğunu unutmayın. Ayrıca, $(< file)
özel olmakla birlikte , $(< file; other command)
(içinde zsh
, başka bir kabuğu taklit etmediğinde, içeriğini genişleten bu file
, kapalı $READNULLCMD
komutu çalıştırarak (tipik olarak bir çağrı cihazı) değildir.
echo
?