命令替換在 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

相關內容