
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