[ $v1 \> $v2 ] 输出结果相反

来源:3-5 条件测试-字符串比较

瓜皮壹号

2021-06-11

老师您看一下,这结果是相反的,为什么呢?

root@host7-201[11:06:27]:~# cat 1.sh 
v1="10"
v2="9"
if [ $v1 \> $v2 ];then
        echo "10大于9"
else
        echo "10小于9"
fi
root@host7-201[11:06:45]:~# sh -x 1.sh 
+ v1=10
+ v2=9
+ '[' 10 '>' 9 ']'
+ echo 10小于9
10小于9
///////////////////////////////////////////////////////////
root@host7-201[11:06:54]:~# vi 1.sh 
root@host7-201[11:07:07]:~# cat 1.sh 
v1="10"
v2="9"
if [ $v1 \< $v2 ];then
        echo "10大于9"
else
        echo "10小于9"
fi
root@host7-201[11:07:09]:~# sh -x 1.sh 
+ v1=10
+ v2=9
+ '[' 10 '<' 9 ']'
+ echo 10大于9
10大于9
root@host7-201[11:07:11]:~# 

写回答

1回答

酷田

2021-06-14

同学您好,我尝试了你的内容,的确无法得到预期结果;查了资料, 发现在方括号中如果使用>和<进行数值比较是由问题的,因此会把数字当成字符串来做比较,会首先比较首个数字的ASCII码,然后对比大小,如果首个数字相同,在继续比较后面第二个数字,非常感谢同学提出的问题

这个知识点是有误的,感谢提出;比较大小还是使用-gt、-lt、-eq、-ne把,大小于号慎用

1
0

掌握Shell脚本编程 360架构师带你进阶Linux高手

30%知识讲解+70%实例操作 掌握Shell脚本编程能力

1647 学习 · 301 问题

查看课程