我有一個多行的腳本變量。 如何遍歷這個變量來逐行讀取它,並按照我想要的方式處理每一行?從shell腳本中的變量中逐行讀取
10
A
回答
21
考慮以下的多行可變
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'
1
雖然我通常使用「while read」來處理多行變量,但我最近有一個實例,它從文件的每一行中刪除了前導空格。使用此代替固定我的問題:
printf %s "$var" | while IFS= read -r line
do
echo "$line"
done
相關問題
- 1. 從shell腳本逐行讀取文件
- 2. shell腳本不逐行讀取
- 3. 從shell腳本讀取變量的shell腳本
- 4. 從shell中的多行變量讀取
- 5. shell腳本:如何從變量中只讀取部分文本
- 6. 從使用shell腳本的文件逐行讀取
- 7. shell逐行讀取
- 8. 在Unix Shell腳本中逐行讀取文件(空格) - 問題
- 9. shell腳本在unix中逐行讀取文件並更新文件中的行
- 10. 如何在shell腳本中逐行讀取文件並將每行存儲在變量中
- 11. Shell腳本從文件讀取變量並在perl腳本中使用
- 12. 從shell腳本中的變量運行shell命令
- 13. 從文本文件讀取變量到shell腳本
- 14. shell腳本:從文件中讀取
- 15. 從文件 - shell腳本中讀取值
- 16. 如何使用shell腳本讀取變量中的多個值
- 17. 如何從bash腳本中的文件逐行讀取?
- 18. Shell - Awk - 從變量中讀取
- 19. 逐行讀取並寫入另一個文件shell腳本
- 20. 從C shell腳本中的變量中提取子字符串?
- 21. 在shell腳本中,如何逐行讀取csv文件並獲取值
- 22. 如何在shell腳本中逐行讀取多行輸出命令?
- 23. 如何在Shell腳本中讀取Env變量?
- 24. 將文件讀取到變量shell腳本中
- 25. 從文本區逐行讀取並分配變量
- 26. 從文本文件到變量逐行讀取
- 27. 如何從linux shell中逐行運行R腳本?
- 28. 從shell腳本讀取python腳本中的空格參數
- 29. Flash動作腳本:如何從文本文件中逐行提取變量?
- 30. 用bash腳本逐行讀取文件
這是一個完美的解決方案,只是好奇,爲什麼不只是x =「a \ nb \ nc d e」? – 2012-08-10 13:13:56
@SenthilKumar,該字符串包含10個字符:'a','\','n','b'等。「\ n」在雙引號內不是特殊的。在bash中,可以寫'$「a \ nb \ nc d e」'來在字符串中嵌入真正的換行符。 「-e」標誌告訴'echo'處理「\ n」作爲新行,而不是兩個單獨的字符。 – chepner 2012-08-10 13:23:32
@chepner:thx,'$'對我來說是新的,但它可以用單引號'$'a \ nb \ nc d e'' – 2012-08-10 14:02:41