我正在使用下面的代码在 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
(你 shouldn't be using anyhow )在没有终止换行符的情况下导致脚本退出。
使用空格分隔符阅读
请注意,只有在使用常规空格而不是其他字符分隔您的单词时,此方法才有效。如果您想要制表符,请将 -d ' '
更改为 -d $'\t'
。
while IFS='' read -r -d ' ' word; word=${word%$'\n'}; [[ $word ]]; do
echo "Read word: $word"
done <My_File
word=${word%$'\n'}
去除任何换行符,如果您的文件不在正好 (space-delimiter-仅)给出的格式。
关于linux - 在 bash 中读取一行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42033831/