当我将空白变量与字符串进行比较时,我的误差
[: !=: unary operator expected
以下是我的剧本中的一行
if [ $monthlystatus = Completed ];then
command x
当我尝试按以下方式更改
时if [ "$monthlystatus" = Completed ];then
command x
它没有给我预期的结果,即如果陈述给我错误的结果。 例如,当我使用双引号时,即使变量monthlystatus的值等于已完成但仍未执行命令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
为空,则表示错误,当我使用双引号时,甚至变量值为Completed
,但仍然没有在第二列显示yes
。
答案 0 :(得分:1)
你的第二种方法是正确的。需要引用变量。演示:
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
输出
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=