命令替换在 for 循环条件内不起作用

命令替换在 for 循环条件内不起作用

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

相关内容