Разница между незанятыми и пустыми переменными в bash
Используя bash, какой лучший метод проверить, пуста или нет переменная?
Если я использую:
if [ -z "$VAR" ]
как было предложено в форуме, это работает для unset-переменной, но это верно, когда переменная установлена, но пустой.
Предложения?
Ответ 1
if [ `set | grep '^VAR=$'` ]
Это ищет строку "VAR =" в списке заданных переменных.
Ответ 2
${var+set} ничего не заменяет, если переменная не установлена и set, если она установлена на что угодно, включая пустую строку. ${var:+set} заменяет set только в том случае, если для переменной задана непустая строка. Вы можете использовать это для тестирования для любого случая:
if [ "${foo+set}" = set ]; then
# set, but may be empty
fi
if [ "${foo:+set}" = set ]; then
# set and nonempty
fi
if [ "${foo-unset}" = unset ]; then
# foo not set or foo contains the actual string 'unset'
# to avoid a potential false condition in the latter case,
# use [ "${foo+set}" != set ] instead
fi
if [ "${foo:-unset}" = unset ]; then
# foo not set or foo empty or foo contains the actual string 'unset'
fi
Ответ 3
Вы можете протестировать с помощью
[ -v name ]
имя без знака $
Ответ 4
ну, вот один из способов
$ s=""
$ declare -p s
declare -- s=""
$ unset s
$ declare -p s
bash: declare: s: not found
появится сообщение об ошибке, если переменная не установлена.
Ответ 5
Это будет верно только для пустых, а не для неустановленных (или имеет значение)