Yeni satırlar değişkendir. LS=$(ls -1)değişkeni LSçıkışa ayarlar ls -1(bu lsarada, çıkış bir terminale gittiği zamankiyle aynı çıktıyı üretir ) eksi sondaki yeni satırlar.
Sorun, değeri yazdırdığınızda yeni satırları kaldırmanızdır. Bir kabuk komut dosyasında $LS“değişkenin değeri” anlamına gelmez, “değerini LSalmak, LSkelimelere göre kelimelere ayırmak IFSve her kelimeyi bir glob paterni olarak yorumlamak” anlamına gelir. Değerini elde etmek LSiçin yazmanız "$LS"veya daha genel olarak $LSçift tırnak arasına koymanız gerekir .
echo "$LS"LSters eğik çizgi karakterlerini yorumlayan bazı kabuklar dışında ve ile başlayan birkaç değer dışında değerini yazdırır -.
printf "$LS"LSyüzde veya ters eğik çizgi karakteri içermediği ve (çoğu uygulamada) ile başlamadığı sürece değerini yazdırır -.
Değerini LStam olarak yazdırmak için düğmesini kullanın printf %s "$LS". Sonunda yeni satır istiyorsanız, kullanın printf '%s\n' "$LS".
$(ls)Genel olarak geçerli dizindeki dosyaların listesi olmadığını unutmayın . Bu yalnızca dosya adlarını yeterince evcilleştirdiğinizde çalışır. (Nokta dosyalar hariç) dosya adlarının listesini almak için, bir joker kullanmak gerekir: *. Sonuç, bir dize değil, bir dize listesidir, bu nedenle bir dize değişkenine atayamazsınız; files=(*)bunları destekleyen kabuklarda bir dizi değişkeni kullanabilirsiniz (ksh93, bash, zsh).
Daha fazla bilgi için bkz. Kabuk betiğim neden boşlukta veya diğer özel karakterlerde boğuluyor?
printf "%s\n" $LS.