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)
小智 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)
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)
另一个快速测试一个字符串,其中有一些东西,但空间.
if [[ -n "${str// /}" ]]; then
echo "It is not empty!"
fi
Run Code Online (Sandbox Code Playgroud)
"-n"表示非零长度字符串.
然后前两个斜杠意味着匹配以下所有内容,在我们的案例空间中.然后是第三个斜杠,后面是替换(空)字符串,并以"}"结束.请注意与通常的正则表达式语法的区别.
您可以在此处阅读有关bash shell脚本中字符串操作的更多信息.
要检查字符串是否为空或仅包含空格,您可以使用:
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)
| 归档时间: |
|
| 查看次数: |
242864 次 |
| 最近记录: |