如何在bash脚本中逐行读取文件?

jon*_*han 4 bash scripting file line

我在网上搜索过这个问题,到目前为止我找到了两种方法:

   while read line; do
      commands
   done < "$filename"
Run Code Online (Sandbox Code Playgroud)

    for $line in $(cat $filename); do
       commands
    done
Run Code Online (Sandbox Code Playgroud)

如果线条有空格,这些都不起作用,例如,如果我们有这样的线条

  textextext text
Run Code Online (Sandbox Code Playgroud)

它不会打印 textextext text

  textextext
  text
Run Code Online (Sandbox Code Playgroud)

它将这些事情视为一条不同的路线,我怎样才能避免这种情况发生?

Mic*_*ker 9

像这样?

while IFS= read line ; do
   something "$line"
done <"$file"
Run Code Online (Sandbox Code Playgroud)

这是一个简短的测试:

while IFS= read line ; do echo "$line"; done <<<"$(echo -e "a b\nc d")"
a b
c d
Run Code Online (Sandbox Code Playgroud)

  • 另一个关键差异是在$ {line}变量周围添加了dbl-quotes.祝好运. (3认同)

seh*_*ehe 7

你可以阅读(bash 4+)

readarray lines < "$file"
Run Code Online (Sandbox Code Playgroud)

然后

for line in "${lines[@]}"; 
do
    echo "$line"
done
Run Code Online (Sandbox Code Playgroud)

请注意,默认情况下readarray甚至会包含每行的行尾字符