比如说我有一个名为“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
有谁知道发生了什么?为什么打印“测试”而不是“测试”的内容?提前致谢。
答案 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