Yeni satırlar değişkendir. LS=$(ls -1)
değişkeni LS
çıkışa ayarlar ls -1
(bu ls
arada, çı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 LS
almak, LS
kelimelere göre kelimelere ayırmak IFS
ve her kelimeyi bir glob paterni olarak yorumlamak” anlamına gelir. Değerini elde etmek LS
için yazmanız "$LS"
veya daha genel olarak $LS
çift tırnak arasına koymanız gerekir .
echo "$LS"
LS
ters 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"
LS
yü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 LS
tam 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
.