使用for循环bash脚本逐行读取文件

时间:2013-09-27 19:13:38

标签: bash for-loop

比如说我有一个名为“tests”的文件,它包含

a
b
c
d

我正在尝试逐行读取此文件,它应该输出

a
b
c
d

我创建了一个名为“read”的bash脚本,并尝试使用for循环

来读取此文件
#!/bin/bash
for i in ${1}; do //for the ith line of the first argument, do...
   echo $i  // prints ith line
done

我执行它

./read tests

但它给了我

tests

有谁知道发生了什么?为什么打印“测试”而不是“测试”的内容?提前致谢。

3 个答案:

答案 0 :(得分:7)

#!/bin/bash
while IFS= read -r line; do
  echo "$line"
done < "$1"

此解决方案可以处理文件名中包含特殊字符的文件(如空格或回车符),与其他响应不同。

答案 1 :(得分:5)

你需要这样的东西:

#!/bin/bash
while read line || [[ $line ]]; do
  echo $line
done < ${1}

您在扩张后所写的内容将成为:

#!/bin/bash
for i in tests; do
   echo $i
done

如果您仍想要for循环,请执行以下操作:

#!/bin/bash
for i in $(cat ${1}); do
   echo $i
done

答案 2 :(得分:2)

这对我有用:

#!/bin/sh

for i in `cat $1`
do
    echo $i
done