2

比如说我有一个名为“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

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

4

3 回答 3

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

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

于 2013-09-27T19:45:18.210 回答
8

你需要这样的东西:

#!/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
于 2013-09-27T19:16:05.180 回答
2

这对我有用:

#!/bin/sh

for i in `cat $1`
do
    echo $i
done
于 2013-09-27T19:21:39.543 回答