บรรทัดใหม่อยู่ในตัวแปร 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
จะทำ