我正在尝试运行以下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
我得到以下输出:
# ./checkCond.sh
Str is not null or space
Str2 is not null or space
答案 0 :(得分:99)
!=
的任何一侧都需要一个空格。将您的代码更改为:
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
答案 1 :(得分:52)
用于检查shell中的空字符串
if [ "$str" == "" ];then
echo NULL
fi
OR
if [ ! "$str" ];then
echo NULL
fi
答案 2 :(得分:15)
如果你需要检查任何数量的空白,而不仅仅是单个空格,你可以这样做:
剥去额外空格的字符串(也将中间的空格与一个空格相对应):
trimmed=`echo -- $original`
--
确保如果$original
包含echo理解的开关,它们仍将被视为要回显的正常参数。同样重要的是不要将""
放在$original
附近,否则空格不会被移除。
之后,您只需检查$trimmed
是否为空。
[ -z "$trimmed" ] && echo "empty!"
答案 3 :(得分:6)
检查字符串是否为空或仅包含空格:
shopt -s extglob # more powerful pattern matching
if [ -n "${str##+([[:space:]])}" ]; then
echo '$str is not null or space'
fi
请参阅Bash手册中的Shell Parameter Expansion和Pattern Matching。
答案 4 :(得分:6)
另一个字符串的快速测试,其中包含空格。
if [[ -n "${str// /}" ]]; then
echo "It is not empty!"
fi
“ - n”表示非零长度字符串。
然后前两个斜杠意味着匹配以下的 all ,在我们的案例空间中。然后是第三个斜杠,后面是替换(空)字符串,然后用“}”关闭。请注意与通常的正则表达式语法的区别。
您可以阅读有关string manipulation in bash shell scripting here的更多信息。
答案 5 :(得分:1)
[ $(echo $variable_to_test | sed s/\n// | sed s/\ //) == "" ] && echo "String is empty"
从字符串中剥离所有换行符和空格将导致空白行不变为可以测试并执行的任何内容