บรรทัดใหม่อยู่ในตัวแปร LS=$(ls -1)ตั้งค่าตัวแปรLSเป็นเอาต์พุตของls -1(ซึ่งสร้างเอาต์พุตเดียวกันกับlsโดยวิธียกเว้นเมื่อเอาต์พุตไปยังเทอร์มินัล) ลบการขึ้นบรรทัดใหม่
ปัญหาคือคุณกำลังลบ newlines เมื่อคุณพิมพ์ค่า ในเชลล์สคริปต์$LSไม่ได้หมายถึง "คุณค่าของตัวแปรLS" มันหมายถึง "นำค่าของLSแบ่งออกเป็นคำตามIFSและตีความแต่ละคำว่าเป็นรูปแบบกลม" ในการรับค่าของLSคุณต้องเขียน"$LS"หรือมากกว่าโดยทั่วไปเพื่อใส่$LSระหว่างเครื่องหมายคำพูดคู่
echo "$LS"พิมพ์ค่าของการยกเว้นในเปลือกหอยบางอย่างที่ตีความตัวอักษรทับขวาและยกเว้นค่าไม่กี่ที่เริ่มต้นด้วยLS-
printf "$LS"พิมพ์ค่าของLSตราบใดที่มันไม่ได้มีร้อยละหรือทับขวาใด ๆ ที่ตัวอักษรและ (กับการใช้งานมากที่สุด) -ไม่ได้เริ่มต้นด้วย
หากต้องการพิมพ์ค่าของตรงการใช้งานLS หากคุณต้องการขึ้นบรรทัดใหม่ที่สิ้นสุดการใช้งานprintf %s "$LS"printf '%s\n' "$LS"
โปรดทราบว่า$(ls)โดยทั่วไปรายการไฟล์ในไดเรกทอรีปัจจุบันจะไม่ ใช้งานได้เมื่อคุณมีชื่อไฟล์ที่เชื่องเพียงพอ ที่จะได้รับรายชื่อไฟล์ (ยกเว้นไฟล์ dot), *คุณจำเป็นต้องใช้สัญลักษณ์แทน: ผลลัพธ์คือรายการของสตริงไม่ใช่สตริงดังนั้นคุณจึงไม่สามารถกำหนดให้กับตัวแปรสตริงได้ คุณสามารถใช้ตัวแปรอาเรย์files=(*)ในเชลล์ที่สนับสนุนพวกมัน (ksh93, bash, zsh)
สำหรับข้อมูลเพิ่มเติมให้ดูที่เหตุใดเชลล์สคริปต์ของฉันจึงสำลักช่องว่างหรืออักขระพิเศษอื่น ๆ
printf "%s\n" $LSจะทำ