簡體   English   中英

在bash中讀取一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM