使用bash脚本读取文件

Leo*_*rdo 23 bash

我需要使用"Do/While"循环读取文件.
如何以字符串形式阅读内容?

这是我的代码:

cat directory/scripts/tv2dbarray.txt | while read line
do
  echo "a line: $line"
done
Run Code Online (Sandbox Code Playgroud)

错误:

test.sh: line 4: syntax error near unexpected token `done'
test.sh: line 4: `done'
Run Code Online (Sandbox Code Playgroud)

Ada*_*iss 71

没有理由在cat这里使用- 它没有添加任何功能并产生不必要的过程.

while IFS= read -r line; do
  echo "a line: $line"
done < file
Run Code Online (Sandbox Code Playgroud)

要将文件的内容读入变量,请使用

foo=$(<file)
Run Code Online (Sandbox Code Playgroud)

(请注意,这会修剪尾随换行符).

  • 我希望我可以多次投票,并确保它是每次Google搜索的最佳结果.我在过去的一小时和每次都说了很多这样的问题,直到现在我找到了"使用猫"的答案.最后,理智的一行答案(与猫不同,只是起作用.) (5认同)
  • @WilliamMartens - 是的,但很快你就必须问自己为什么要在 bash 中做这么多事情,而不仅仅是使用 Python 或其他脚本语言。(不,我不知道你的答案,但我确信有一个。在 SO 上搜索 - 我确信之前已经有人问过并回答过这个问题。如果还没有,请发布一个新问题。) (2认同)
  • @WilliamMartens:`i=0;读取行时;做((i=i+1));echo "行 $i: $line"; 您还可以作弊并使用“grep -n”来搜索与每一行匹配的内容并对结果进行编号:“grep -n '' file | done &lt; file` 在阅读时...`@ArtOfWarfare 我无法控制。我的母语是 bash。️ 看到 10 年后仍然有意义的问题和答案真是太好了! (2认同)

Eri*_*rik 31

cat file | while read line
do
  echo "a line: $line"
done
Run Code Online (Sandbox Code Playgroud)

编辑:

要将文件内容放入var use:

foo="`cat file`"
Run Code Online (Sandbox Code Playgroud)

  • UUOC:读取线; 做......; 完成<文件 (9认同)