Làm thế nào để một lần lặp đúng trên các dòng trong bash hoặc trong một biến hoặc từ đầu ra của một lệnh? Đơn giản chỉ cần đặt biến IFS thành một dòng mới hoạt động cho đầu ra của lệnh chứ không phải khi xử lý một biến chứa các dòng mới.
Ví dụ
#!/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
Điều này cho đầu ra:
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
Như bạn có thể thấy, lặp lại biến hoặc lặp qua cat
lệnh sẽ in từng dòng một cách chính xác. Tuy nhiên, vòng lặp đầu tiên in tất cả các mục trên một dòng. Có ý kiến gì không?