Проверка того, что переменная не пуста в bash - PullRequest
0 голосов
/ 30 мая 2020

Я хочу запустить удаленную команду через s sh. Итак, однострочная команда:

ssh root@10.1.1.101 'VMID=`./run_prog` && if [ -n $VMID ]; then echo "id=$VMID"; vim-cmd vmsvc/power.off $VMID; else echo "$VMID empty"; fi'

Проблема в том, что если VMID пустое или непустое, я вижу результат vim-cmd.

id=
Usage: power.off vmid

или

34
Powering off VM:

Как я могу быть уверен, что vim-cmd выполняется для непустых VMID значений?

1 Ответ

2 голосов
/ 30 мая 2020

Проблема в том, что вы не заключаете переменную в кавычки внутри условия if. Вы должны сделать это следующим образом:

if [ -n "$VMID" ]

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

-n СТРОКА
длина СТРОКИ отлична от нуля
СТРОКА
эквивалентно -n СТРОКА

Поэтому, когда VMID пусто, условие if приводит к следующему:

if [ -n ]

и test предполагают, что вы хотите проверить, является ли -n пустой строкой. Не поймет, что вы использовали -n в качестве опции. Итак, -n не пуст и тест проходит.

Если вы используете цитату, test поймет, что вы хотите.

Если я могу добавить предложение, не используйте обратные кавычки для подстановки команд. Вместо этого используйте $(./run_prog). Отметьте этот ответ , если вам нужна дополнительная информация.

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