Проверьте, не является ли строка ни пустым, ни пробелом в оболочке script
Я пытаюсь запустить следующую оболочку script, которая должна проверять, не является ли строка ни пробелом, ни пустым. Тем не менее, я получаю одинаковый результат для всех трех упомянутых строк. Я попытался использовать синтаксис "[[", но безрезультатно.
Вот мой код:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str"!=" " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2"!=" " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3"!=" " ]; then
echo "Str3 is not null or space"
fi
Я получаю следующий вывод:
# ./checkCond.sh
Str is not null or space
Str2 is not null or space
Ответы
Ответ 1
Вам нужно место по обе стороны от !=
. Измените свой код на:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str" != " " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2" != " " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3" != " " ]; then
echo "Str3 is not null or space"
fi
Ответ 2
Для проверки пустой строки в оболочке
if [ "$str" == "" ];then
echo NULL
fi
ИЛИ
if [ ! "$str" ];then
echo NULL
fi
Ответ 3
Если вам нужно проверить любое количество пробелов, а не просто одно пространство, вы можете сделать это:
Чтобы вырезать строку лишнего пробела (также сглаживает пробелы в среднем и одном пространстве):
trimmed=`echo -- $original`
--
гарантирует, что если $original
содержит переключатели, понятые эхом, они все равно будут считаться нормальными аргументами, которые будут отображаться эхом. Также важно не помещать ""
вокруг $original
, или пробелы не удаляются.
После этого вы можете просто проверить, нет ли $trimmed
.
[ -z "$trimmed" ] && echo "empty!"
Ответ 4
Чтобы проверить, является ли строка пустой или содержит только пробелы, которые вы могли бы использовать:
shopt -s extglob # more powerful pattern matching
if [ -n "${str##+([[:space:]])}" ]; then
echo '$str is not null or space'
fi
См. Расширение параметров оболочки и Соответствие шаблону в руководстве Bash.
Ответ 5
Еще один быстрый тест для того, чтобы строка имела что-то в нем, но пространство.
if [[ ! -z "${str/ //}" ]]; then
echo "It is not empty!"
fi
Ответ 6
[ $(echo $variable_to_test | sed s/\n// | sed s/\ //) == "" ] && echo "String is empty"
Удаление всех строк и пробелов из строки приведет к тому, что пустая строка будет уменьшена до нуля, которая может быть протестирована и действовала при