Как проверить, установленна ли переменная в Bash
Заголовок: Как узнать, установлена ли переменная в Bash?
Описание проблемы:
Мне нужно проверить, установлен ли параметр в функции Bash. Например, как можно проверить, передан ли первый параметр в функцию? Вот мой код:
function a {
# как проверить, установлен ли $1?
}
Как мне можно реализовать эту проверку?
4 ответ(ов)
Чтобы проверить, что строковая переменная не является пустой или нулевой, т.е. если она задана, используйте:
if [ -n "$1" ]
Это противоположно -z
. Я чаще использую -n
, чем -z
.
Пример использования:
if [ -n "$1" ]; then
echo "Вы указали первый параметр!"
else
echo "Первый параметр не указан."
fi
Существует множество способов сделать это, и один из них выглядит следующим образом:
if [ -z "$1" ]
Этот код успешно сработает, если переменная $1
является пустой или не задана.
Чтобы проверить, что переменная непуста, я использую следующую конструкцию:
if [[ $var ]]; then ... # `$var` развернется в непустую строку
Противоположная проверка определяет, является ли переменная либо не установленной, либо пустой:
if [[ ! $var ]]; then ... # `$var` развернется в пустую строку (установлена или нет)
Чтобы проверить, установлена ли переменная (пустая или непустая), я использую следующие команды:
if [[ ${var+x} ]]; then ... # `var` существует (пустая или непустая)
if [[ ${1+x} ]]; then ... # Параметр 1 существует (пустой или непустой)
Противоположная проверка определяет, не установлена ли переменная:
if [[ ! ${var+x} ]]; then ... # `var` вообще не установлена
if [[ ! ${1+x} ]]; then ... # Мы были вызваны без аргументов
Если вы хотите проверить, установлен ли аргумент в Bash, рекомендуем использовать более безопасный подход, проверяя количество переданных аргументов. Вот ваш оригинальный код:
if [ "$1" != "" ]; then
echo \$1 is set
else
echo \$1 is not set
fi
Тем не менее, обычно предпочтительнее проверять $#
, который возвращает количество переданных аргументов. Вот переписанный пример:
if [ $# -gt 0 ]; then
echo \$1 is set
else
echo \$1 is not set
fi
Этот способ позволяет избежать потенциальных ошибок, связанных с пустыми строками, и более безопасен для работы с аргументами командной строки.
Как выводить команды оболочки по мере их выполнения
Назначение значений по умолчанию для переменных оболочки одной командой в bash
Как указать приватный SSH-ключ для выполнения команды shell в Git?
Как сделать паузу в shell-скрипте на одну секунду перед продолжением?
Как использовать 'grep' для непрерывного потока?