Bash中[ "abc" < $bar ]命令含义及<运算符作用解析
关于Bash中
[ "abc" < $bar ]的解释 首先要明确:你写的这条命令里,<不是字符串比较运算符,而是被Bash解析成了输入重定向,这和你以为的test命令([ ... ])里的比较逻辑完全不同。
原命令的实际行为
Bash会先解析命令里的重定向符号,再执行[ ... ]本身:
< $bar会被处理为:尝试把变量$bar对应的文件名作为标准输入,传给后面的[ "abc" ]命令。[ "abc" ]本身只是检查字符串"abc"是否非空——这永远是真(退出码为0),但test命令根本不会读取标准输入,所以这个重定向完全没用。- 如果
$bar对应的文件不存在,Bash会直接报错,比如bash: xxx: No such file or directory(xxx是$bar的取值)。
正确的字符串小于比较方式
如果你的目的是比较字符串"abc"和$bar的ASCII顺序大小,需要用下面两种正确写法:
- 用标准
[ ... ]时,必须转义<为\<,同时给变量加引号防止分词:[ "abc" \< "$bar" ] - 用Bash扩展的
[[ ... ]](更推荐,语法更直观安全),不需要转义<:[[ "abc" < "$bar" ]]
这两种写法才会真正按ASCII码顺序比较两个字符串:比如当$bar是"abd"时,"abc" < "abd"结果为真;当$bar是"abb"时,结果为假。
内容的提问来源于stack exchange,提问作者Dan Chen
相关产品推荐
相关产品推荐

