Bash 使用if语句比较空白变量
当我比较一个空白变量和一个字符串时,我得到了下面的错误Bash 使用if语句比较空白变量,bash,if-statement,Bash,If Statement,当我比较一个空白变量和一个字符串时,我得到了下面的错误 [: !=: unary operator expected 下面是我脚本中的一行 if [ $monthlystatus = Completed ];then command x 当我试图改变这一点如下 if [ "$monthlystatus" = Completed ];then command x 它不会给我预期的结果,即如果语句给我错误的结果。 例如,当我使用双引号时,即使变量monthlystatus的值等于Compl
[: !=: unary operator expected
下面是我脚本中的一行
if [ $monthlystatus = Completed ];then
command x
当我试图改变这一点如下
if [ "$monthlystatus" = Completed ];then
command x
它不会给我预期的结果,即如果语句给我错误的结果。
例如,当我使用双引号时,即使变量monthlystatus的值等于Completed,但仍然没有执行命令x
下面是真正的代码
if [ $monthlystatus != Failed ] && [ $monthlystatus != Aborted ];then
cat /home/a-hkataria/objectstatus_filesystem2.txt /home/a-hkataria/objectstatus_filesystem3.txt > /home/a-hkataria/objectstatus_filesystem4.txt
awk '$2 = $2 FS "Yes"' /home/a-hkataria/objectstatus_filesystem4.txt
else
cat /home/a-hkataria/objectstatus_filesystem2.txt /home/a-hkataria/objectstatus_filesystem3.txt > /home/a-hkataria/objectstatus_filesystem4.txt
awk '$2 = $2 FS "No"' /home/a-hkataria/objectstatus_filesystem4.txt
fi
因此,如果变量
monthlystatus
为空,则会显示错误,并且当我使用双引号时,变量的偶数值已完成
,但仍不会在第二列中显示是
您的第二种方法是正确的。需要引用变量。演示:
while read -r line; do
[ "$line" = Completed ] && echo "true1 for =$line=" || echo "false1 for =$line="
[[ "$line" == Completed ]] && echo "true2 for =$line=" || echo "false2 for =$line="
[[ "$line" =~ ^Completed$ ]] && echo "true3 for =$line=" || echo "false3 for =$line="
echo
done <<EOF
Completed
completed
Completediano
not Completed
notCompleted
etc
EOF
“不工作”不是问题描述。请阅读。给出的示例不是示例(不完整或不可验证)。显示真实代码。用真实代码更新问题。@HiteshKataria表示变量
monthlystatusXX
未设置或包含空字符串(除非set-e
处于活动状态,在这种情况下,未获取错误表示已设置,但包含空字符串)。使用@CharlesDuffy建议的技术,但是如果您确实想用这种方式扩展字符串,请添加大括号,以便shell使用正确的变量名:echo“XX${monthlystatus}XX”
。
true1 for =Completed=
true2 for =Completed=
true3 for =Completed=
false1 for =completed=
false2 for =completed=
false3 for =completed=
false1 for =Completediano=
false2 for =Completediano=
false3 for =Completediano=
false1 for =not Completed=
false2 for =not Completed=
false3 for =not Completed=
false1 for =notCompleted=
false2 for =notCompleted=
false3 for =notCompleted=
false1 for ==
false2 for ==
false3 for ==
false1 for =etc=
false2 for =etc=
false3 for =etc=