检查shell脚本中的字符串是否既不是空也不是空格

Shu*_*hra 82 bash shell freebsd

我试图运行以下shell脚本,它应该检查字符串既不是空格也不是空.但是,我得到的所有3个字符串的输出都相同.我尝试过使用"[["语法,但无济于事.

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

# ./checkCond.sh 
Str is not null or space
Str2 is not null or space
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 104

你需要一个空间!=.将您的代码更改为:

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
Run Code Online (Sandbox Code Playgroud)

  • ^^这是语法.命令行中的第一个单词是命令,后续的是参数.`var = value [command [args]]`是语法,其中为变量赋值.为了比较,`[`(`/ usr/bin/[`)是命令&它需要var1,!=&var2是3个独立的参数.var1!= var2是一个参数. (5认同)

小智 55

用于检查shell中的空字符串

if [ "$str" == "" ];then
   echo NULL
fi
Run Code Online (Sandbox Code Playgroud)

要么

if [ ! "$str" ];then
   echo NULL
fi
Run Code Online (Sandbox Code Playgroud)

  • shell的字符串相等运算符是`=`.`==`是一个由shell作者发明的非便携式黑客,可以搞砸年轻程序员的思想. (6认同)

hyd*_*yde 16

如果你需要检查任何数量的空格,而不仅仅是单个空格,你可以这样做:

去除多余的空白字符串(也可以将中间的空格与一个空格相对应):

trimmed=`echo -- $original`
Run Code Online (Sandbox Code Playgroud)

--确保如果$original包含回声了解交换机,他们仍然被视为要呼应普通参数.它也没有把重要的""周围$original,或空间将不会移除.

之后,您可以检查是否$trimmed为空.

[ -z "$trimmed" ] && echo "empty!"
Run Code Online (Sandbox Code Playgroud)

  • 在bourne shell中,我以" - "作为trimmed的值. (2认同)

elo*_*age 9

另一个快速测试一个字符串,其中有一些东西,但空间.

if [[ -n "${str// /}" ]]; then
    echo "It is not empty!"
fi
Run Code Online (Sandbox Code Playgroud)

"-n"表示非零长度字符串.

然后前两个斜杠意味着匹配以下所有内容,在我们的案例空间中.然后是第三个斜杠,后面是替换(空)字符串,并以"}"结束.请注意与通常的正则表达式语法的区别.

您可以在此处阅读有关bash shell脚本中字符串操作的更多信息.

  • `[[ -n "$1" ]]` 与 `[[ ! -z“$1”“]]`? (3认同)

Eug*_*ash 6

要检查字符串是否为空或仅包含空格,您可以使用:

shopt -s extglob  # more powerful pattern matching

if [ -n "${str##+([[:space:]])}" ]; then
    echo '$str is not null or space'
fi
Run Code Online (Sandbox Code Playgroud)

请参阅Bash手册中的Shell参数扩展模式匹配.

  • 您可以出于学习目的对此做些解释吗?这看起来像胡言乱语的^^; 这是grep之类的吗? (2认同)