İstediğin her şeyi yönlendirebilirsin echoama onunla hiçbir şey yapmaz. echostandart 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 echobazı kaçış dizileri bulunan bazı uygulamalar ve / veya -olasılıkla seçenek olarak başlayan argümanlar ile ).
İsterseniz echobir 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 catkomut ve echoekler , 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. yashgeçerli karakterlerin bir parçasını oluşturmayan baytları da kaldıracaktır.
İstediğiniz çünkü bunu yapmak isteyen nedeni ise echogenişletmek için \n, \b, \0351(UNIX conformant olarak ... dosyasındaki kaçış dizileri echouygulamaları yapmak ama hepsi değil ), sonra sen yerine kullanmayı tercih printfyerine :
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, zshve bashbir de yapabilirsiniz:$(<file) . Bu , genişletmeyi yapmak için dosyanın içeriğini okumak yerine kabuğun bulunduğu özel bir catiş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?