linux - 在 bash 中读取一行文件

标签 linux bash file

我正在使用下面的代码在 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/

相关文章:

linux - WX_CONFIG_OPTIONS : command not found

c - 为什么 malloc 在我的测试程序中比静态内存分配更快?

bash - 使用 bash,您使用哪些脚本或命令来提高工作效率?

linux - 在 mv 命令中嵌入 bash 命令

c - 尝试用 C 语言编译一个简单的文件

java - 如何从java将数据保存到记事本中

linux - 我正在 RHEL v7(AWS 实例)上安装 postgres 9

linux - 为什么 Jenkins 和 GitLab 在同一台服务器上时都没有在浏览器中打开?

PHP:如何获取失败的shell命令的错误消息?

c语言创建一个文件,在文件中写上hello world