我正在尝试在Bash脚本中比较两个字符串,但是结果非常奇怪。
阅读文档后,我发现
期望的结果是 4 x
- CentOS release 6.4 (Final) - GNU Bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) (
if [[ "010" < "01." ]]; then echo "Wrong"; else echo "OK"; fi
if [[ "010" < "01.0" ]]; then echo "Wrong"; else echo "OK"; fi
if [ "010" \< "01." ]; then echo "Wrong"; else echo "OK"; fi
if [ "010" \< "01.0" ]; then echo "Wrong"; else echo "OK"; fi
阅读文档后,我发现
[[ < ]]
和 [ \< ]
看起来应该是一样的,但实际上并不是。当字符串长度不相同时,[[ < ]]
的工作方式似乎是错误的。请问我有什么遗漏吗?期望的结果是 4 x
OK
。测试环境如下:- CentOS release 6.4 (Final) - GNU Bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) (
OK Wrong OK OK
)
- Ubuntu 14.04.2 (Trusty Tahr) LTS - GNU Bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu) (OK Wrong OK OK
)
- openSUSE 13.1 (Bottle) (x86_64) - GNU Bash, version 4.2.53(1)-release (x86_64-suse-linux-gnu) (OK OK OK OK
)
echo -e "01.0\n010\n01." | sort
的输出结果是 "01.", "010", "01.0",而期望的输出结果应该是 "ok, wrong, ok, wrong"。因此,我猜测这种排序差异可能是答案的提示。 - Chris Maes