for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done
给我一个错误:
-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")
答案1
的输出wc -l sedtest1
将类似于:
21 sedtest1
所以测试就会变成这样a <= 21 sedtest1
无效的东西。
此外,这确实意味着该wc
命令将在循环的每次迭代中运行。如果文件的内容sedtest1
在每次迭代之间没有改变,最好首先将该行数保存在循环外的变量中:
n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done
我还怀疑您正在尝试使用循环以低效且非 shell 的方式处理文本。您可能想阅读为什么使用 shell 循环处理文本被认为是不好的做法?。以这种方式循环文件的每一行并不是正确的方法。
答案2
没关系,我只是非常愚蠢......
wc -l file
输出为“x 文件”。
我所要做的就是这样:
for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done