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

Функции в bash вызываются точно так же, как команды, а не как функции в других языках. Вместо isInstalled ('node', 'nodejs') выполните:

isInstalled 'node' 'nodejs'

И условие if будет выглядеть так:

if ! isInstalled 'node' 'nodejs';
then
    ...
0
22.01.2019, 19:03
2 ответа

Вывод 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

Я также подозреваю, что вы пытаетесь использовать цикл для обработки текста неэффективным и не -способом оболочки. Вы можете прочитать Почему использование цикла оболочки для обработки текста считается плохой практикой? . Перебирать каждую строку файла таким образом — неправильный путь.

5
28.01.2020, 02:18

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

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

0
28.01.2020, 02:18

Теги

Похожие вопросы