Tôi có một lệnh trả về nhiều dòng. Để xử lý thêm tôi cần xử lý từng dòng duy nhất của những dòng đó.
Mã hiện tại của tôi hoạt động bằng cách sửa đổi IFS ( Dấu tách trường nội bộ ):
ROWS=$(some command returning multiple lines)
O=$IFS #save original IFS
IFS=$(echo -en "\n\b") # set IFS to linebreak
for ROW in ${ROWS[@]}
do
echo "$ROW"
done
IFS=$O #restore old IFS
Tôi tự hỏi, có cách nào tốt hơn để truy cập vào các dòng duy nhất của đầu ra nhiều dòng, một mà không sửa đổi IFS không? Đặc biệt là khả năng đọc kịch bản của tôi trở nên tồi tệ bằng cách sửa đổi IFS.
Cập nhật: Tôi gặp khó khăn để có câu trả lời hoạt động, ví dụ: câu trả lời từ choroba:
while IFS= read -r line ; do
let var+=line #line 42
done << $(sqlite3 -list -nullvalue NULL -separator ',' /var/log/asterisk/master.db "${QUERY}")
echo "$var" # line 44
đưa cho tôi
./bla.sh: row 44: Warning: here-document at line 43 delimited by end-of-file (wanted `$(sqlite3 -list -nullvalue NULL -separator , /var/log/asterisk/master.db ${QUERY})')
./bla.sh: row 42: let: echo "": syntax error: invalid arithmetic operator. (error causing character is \"""\").
có ai giúp tôi cái này không? Cảm ơn!
< <(some command returning multiple lines)
, nhưng đó không phải là những gì bạn đang làm.