[轉載]: shell普通變量的逐行讀取
[轉載源]
我有一個多行的腳本變量。
我如何遍歷這個變量來逐行讀取它并按照我想要的方式處理每一行?
最佳答案
考慮以下多行變量
x=$(echo -e "a\nb\nc d e")
以及每行的簡單過程:只需
echo它帶有前綴= LINE:并在該行周圍加上單引號。以下任一代碼都將滿足該要求:while read line; do echo "LINE: '${line}'"; done <<< "$x"
或者
while read line; do echo "LINE: '${line}'"; done < <(echo "$x")
兩者都不創建子shell(因此您可以,例如,在循環中設置變量并在循環之外訪問它們),并且兩個輸出
LINE: 'a'
LINE: 'b'
LINE: 'c d e'
但是假設你有
x=$(echo -e "a \n b\nc d e")
# note--------^--^
以及您的應用程序的前導和尾隨空格問題(例如,解析 Git 瓷器)。上述兩個代碼將為后一個變量/數據提供與前一個完全相同的輸出,這不是您想要的。要保留前導和尾隨空格,請替換
while read line與 while IFS= read -r line .即,以下任一代碼while IFS= read -r line; do echo "LINE: '${line}'"; done <<< "$x"
或者
while IFS= read -r line; do echo "LINE: '${line}'"; done < <(echo "$x")
會產生
LINE: 'a '
LINE: ' b'
LINE: 'c d e'
見 Greg Wooledge's excellent Bash FAQ詳情。
關于bash - 從 shell 腳本中的變量中逐行讀取,我們在Stack Overflow上找到一個類似的問題: https://stackoverflow.com/questions/11902177/

浙公網安備 33010602011771號