[英]Read a file with a single line in bash
我正在使用下面的代碼以bash逐字讀取文件
while read line; do
for word in $line; do
echo "word = '$word'"
done
done < My_File
但是,上面的代碼不起作用,因為My_File
只有一行。 我應該如何修改代碼?
這會將單行讀入數組,在IFS中分割字符(默認情況下,空格和換行符)。
read -r -a words <My_File || (( ${#words[@]} ))
for word in "${words[@]}"; do
echo "Read word: $word"
done
||
條件可以防止set -e
( 無論如何您都不應該使用它 )在沒有終止換行符的情況下導致腳本退出。
請注意,只有當規則的空格(沒有其他字符)分隔您的單詞時,此選項才起作用。 如果要使用制表符,請將-d ' '
更改為-d $'\\t'
。
while IFS='' read -r -d ' ' word; word=${word%$'\n'}; [[ $word ]]; do
echo "Read word: $word"
done <My_File
word=${word%$'\\n'}
刪除所有換行符,如果您的文件不是完全以給定的(僅限空格分隔符)格式顯示的,則可能出現換行符。
您可以像這樣調整代碼以說明沒有終止換行符的行:
(cat My_File; echo ) | while read line; do
for word in $line; do
echo "word = '$word'"
done
done
這將在輸入末尾添加換行符,無論My_File是否具有換行符,都不會更改輸出。
-Rich Alloway(RogueWave)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.