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

use*_*587 0 bash 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")

Sté*_*las 5

的输出wc -l sedtest1将类似于:

21 sedtest1
Run Code Online (Sandbox Code Playgroud)

所以测试将变成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
Run Code Online (Sandbox Code Playgroud)

我还怀疑您正在尝试使用循环以低效且非 shell 的方式处理文本。您可能想阅读为什么使用 shell 循环处理文本被认为是不好的做法?. 以这种方式遍历文件的每一行并不是正确的方法。