10 ответов:
в bash по крайней мере, следующие тесты команд Если $var пуст:
if [[ -z "$var" ]]; then #do what you want fiкоманда
man test- твой друг.
Я тоже видел
if [ "x$variable" = "x" ]; then ...который, очевидно, очень надежный и независимый от оболочки.
кроме того, есть разница между "пустой" и "отключено". Смотрите как сказать, если строка не определена в скрипте оболочки bash?.
if [ ${foo:+1} ] then echo "yes" fiпечать
yesесли переменная установлена.${foo:+1}возвращает 1, если переменная установлена, в противном случае она вернет пустую строку.
The вопрос просит как проверить, является ли переменная пустой строкой и лучшие ответы уже даны для этого.
Но я приземлился здесь после периода, прошедшего программирование на php, и то, что я на самом деле искал, было проверкой, как пустая функция в php работа в оболочке bash.
После прочтения ответов я понял, что я не думал должным образом в Баш, но во всяком случае в тот момент функция, как пустой в php было бы ооочень удобно в моем коде bash.
Поскольку я думаю, что это может случиться с другими, я решил преобразовать пустую функцию php в bash
Согласно руководство php:
переменная считается пустой, если она не существует или ее значение является одним из следующих:
- "" (пустая строка)
- 0 (0 как целое число)
- 0.0 (0 как поплавок)
- " 0 " (0 как a строка)
- пустой массив
- переменная объявлена, но без значения
конечно null и ложные случаи не могут быть преобразованы в bash, поэтому они опущены.
function empty { local var="" # Return true if: # 1. var is a null string ("" as empty string) # 2. a non set variable is passed # 3. a declared variable or array but without a value is passed # 4. an empty array is passed if test -z "$var" then [[ $( echo "1" ) ]] return # Return true if var is zero (0 as an integer or "0" as a string) elif [ "$var" == 0 2> /dev/null ] then [[ $( echo "1" ) ]] return # Return true if var is 0.0 (0 as a float) elif [ "$var" == 0.0 2> /dev/null ] then [[ $( echo "1" ) ]] return fi [[ $( echo "" ) ]] }
Пример использования:if empty "${var}" then echo "empty" else echo "not empty" fi
Демо:
следующий фрагмент:#!/bin/bash vars=( "" 0 0.0 "0" 1 "string" " " ) for (( i=0; i<${#vars[@]}; i++ )) do var="${vars[$i]}" if empty "${var}" then what="empty" else what="not empty" fi echo "VAR \"$var\" is $what" done exitвыходы:
VAR "" is empty VAR "0" is empty VAR "0.0" is empty VAR "0" is empty VAR "1" is not empty VAR "string" is not empty VAR " " is not emptyсказав, что в логика bash проверки на нуле в этой функции могут вызвать побочные проблемы imho, любой, кто использует эту функцию, должен оценить этот риск и, возможно, решить отключить эти проверки, оставив только первый.
вернет
trueесли переменная не определена или задана пустая строка ("").if [ -z "$MyVar" ] then echo "The variable MyVar has nothing in it." elif ! [ -z "$MyVar" ] then echo "The variable MyVar has something in it." fi
вы можете различать неназначенные переменные и переменные, которые установлены и пусты:
is_empty() { local var_name="" local var_value="${!var_name}" if [[ -v "$var_name" ]]; then if [[ -n "$var_value" ]]; then echo "set and non-empty" else echo "set and empty" fi else echo "unset" fi } str="foo" empty="" is_empty str is_empty empty is_empty noneрезультат:
set and non-empty set and empty unsetкстати, я рекомендую использовать
set -uчто вызовет ошибку при чтении unset переменных, это может спасти вас от бедствий, таких какrm -rf $dirвы можете прочитать об этом и других лучших практик для "строгого режима" здесь.
Comments