Могу ли я использовать! = "" Чтобы сказать "не пусто"? - PullRequest
0 голосов
/ 07 февраля 2019

Поскольку bash возвращает мне это! = Неверно, но это базовый оператор.

Я пытаюсь использовать его в трех выражениях для цикла

for (( c=1; ${!c}!=""; c++ )) do

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Вы не можете выполнить сравнение строк в (()), потому что это только арифметика.

Что вы можете сделать, это что-то вроде этого, где проверка строки является отдельным тестом после увеличения счетчика var:

c=0
while (( c += 1 )) && [[ -n ${!c} ]]; do
    echo "$c ${!c}"
done
0 голосов
/ 07 февраля 2019

Можно, но на самом деле это не обычный способ проверить, есть ли пустые аргументы.

for((i=1; i<=$#; ++i)); do
   [[ "${!i}" ]] || echo "$0: Argument $i is empty" >&2
done

Если вас не волнует индекс, просто зацикливание на реальных аргументах еще проще.

for arg in "$@"; do
   [[ "$arg" ]] || echo "$0: Empty argument" >&2
done

Обратите внимание, как мы печатаем диагностику со стандартной ошибкой, и позаботимся о том, чтобы имя скрипта, генерирующего диагностику, было включено в сообщение.

Вам очень редко нужно проверять наличие пустыхаргументы на практике, но, возможно, это учебное упражнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...