Baris baru dalam variabel. LS=$(ls -1)set variabel LSke output dari ls -1(yang menghasilkan output yang sama seperti ls, omong-omong, kecuali ketika output pergi ke terminal), dikurangi trailing newlines.
Masalahnya adalah Anda menghapus baris baru saat Anda mencetak nilainya. Dalam skrip shell, $LStidak berarti "nilai variabel LS", itu berarti "mengambil nilai LS, membaginya menjadi kata sesuai dengan IFSdan menafsirkan setiap kata sebagai pola gumpalan". Untuk mendapatkan nilai LS, Anda perlu menulis "$LS", atau lebih umum untuk menempatkan $LSantara tanda kutip ganda.
echo "$LS"mencetak nilai LS, kecuali dalam beberapa shell yang menginterpretasikan karakter backslash, dan kecuali untuk beberapa nilai yang dimulai dengan -.
printf "$LS"mencetak nilai LSasalkan tidak mengandung persen atau karakter backslash dan (dengan sebagian besar implementasi) tidak dimulai dengan -.
Untuk mencetak nilai LStepatnya, gunakan printf %s "$LS". Jika Anda ingin baris baru di akhir, gunakan printf '%s\n' "$LS".
Perhatikan bahwa $(ls)secara umum tidak ada daftar file dalam direktori saat ini. Ini hanya berfungsi ketika Anda memiliki nama file yang cukup jinak. Untuk mendapatkan daftar nama file (kecuali file dot), Anda perlu menggunakan wildcard: *. Hasilnya adalah daftar string, bukan string, sehingga Anda tidak dapat menetapkannya ke variabel string; Anda bisa menggunakan variabel array files=(*)di shell yang mendukungnya (ksh93, bash, zsh).
Untuk informasi lebih lanjut, lihat Mengapa skrip shell saya tercekik di spasi putih atau karakter khusus lainnya?
printf "%s\n" $LSakan melakukannya.