Подтвердить что ты не робот

Проверьте, не является ли строка ни пустым, ни пробелом в оболочке 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
4b9b3361

Ответ 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!"

Ответ 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"

Удаление всех строк и пробелов из строки приведет к тому, что пустая строка будет уменьшена до нуля, которая может быть протестирована и действовала при