вопрос спрашивает , как проверить, является ли переменная пустой строкой и для этого уже даны лучшие ответы.
Но я попал сюда после того, как прошёл период программирования на php, и то, что я действительно искал, было проверкой типа пустой функции в php , работающей в оболочке bash.
Прочитав ответы, я понял, что не думаю о bash должным образом, но, в любом случае, в тот момент такая функция, как empty в php, была бы очень удобной в моем bash-коде.
Поскольку я думаю, что это может случиться с другими, я решил преобразовать пустую функцию php в bash
Согласно инструкции php :
переменная считается пустой, если она не существует или имеет одно из следующих значений:
- "" (пустая строка)
- 0 (0 в виде целого числа)
- 0,0 (0 в виде числа с плавающей запятой)
- "0" (0 в виде строки)
- пустой массив
- объявленная переменная, но без значения
Конечно, случаи null и false не могут быть преобразованы в bash, поэтому они опущены.
function empty
{
local var="$1"
# 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, любой, кто использует эту функцию, должен оценить этот риск и, возможно, решит отключить эти проверки, оставив только первую.