Подстановка команд не работает внутри условия цикла

Подстановка команд не работает внутри условия цикла

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-способом. Вы можете прочитатьПочему использование цикла оболочки для обработки текста считается плохой практикой?. Подобный цикл по каждой строке файла — неверный подход.

решение2

Неважно, я просто был невероятно глуп... wc -l fileвыводит как «x file».

Все, что мне нужно было сделать, это: for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done

Связанный контент