หนึ่งจะทำซ้ำอย่างถูกต้องผ่านสายในทุบตีทั้งในตัวแปรหรือจากการส่งออกของคำสั่งได้อย่างไร เพียงแค่ตั้งค่าตัวแปร IFS ให้เป็นบรรทัดใหม่นั้นใช้งานได้กับเอาต์พุตของคำสั่ง แต่ไม่ใช่เมื่อทำการประมวลผลตัวแปรที่มีบรรทัดใหม่
ตัวอย่างเช่น
#!/bin/bash
list="One\ntwo\nthree\nfour"
#Print the list with echo
echo -e "echo: \n$list"
#Set the field separator to new line
IFS=$'\n'
#Try to iterate over each line
echo "For loop:"
for item in $list
do
echo "Item: $item"
done
#Output the variable to a file
echo -e $list > list.txt
#Try to iterate over each line from the cat command
echo "For loop over command output:"
for item in `cat list.txt`
do
echo "Item: $item"
done
สิ่งนี้จะให้ผลลัพธ์:
echo:
One
two
three
four
For loop:
Item: One\ntwo\nthree\nfour
For loop over command output:
Item: One
Item: two
Item: three
Item: four
อย่างที่คุณเห็นการสะท้อนตัวแปรหรือวนซ้ำcat
คำสั่งจะพิมพ์แต่ละบรรทัดทีละบรรทัดอย่างถูกต้อง อย่างไรก็ตามสิ่งแรกสำหรับการวนซ้ำพิมพ์รายการทั้งหมดในบรรทัดเดียว ความคิดใด ๆ