ose*_*003 19 bash string-comparison
谁知道为什么会这样?这是bash的错误吗?
x='mnt:[4026532411]'
[[ $x == $x ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
我期待结果OK
,但事实并非如此.
当然,这是有效的
[[ "$x" == "$x" ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
但据我所知,bash [[]]的优点是在比较时不需要引用var.
x='a b'
[[ $x == $x ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
作品.
讽刺的是
x='mnt:[4026532411]'
[[ $x != $x ]] && echo Oh my god
Run Code Online (Sandbox Code Playgroud)
结果是我的天啊
che*_*ner 19
不带引号的右侧==
和!=
被视为模式,而不是文字字符串.mnt:[4026532411]
将匹配mnt:
后紧跟一个的0,1,2,3,4,5,或6,由于图案mnt:[4026532411]
和mnt:[0123456]
是相等的.要匹配连接字符串,您需要引用扩展.
x='mnt:[4026532411]'
[[ $x == "$x" ]] && echo OK
Run Code Online (Sandbox Code Playgroud)
你看到的是从bash
手册页做这句话:
当使用==和!=运算符时,运算符右侧的字符串被视为模式,并根据模式匹配下面描述的规则进行匹配,就像启用了extglob shell选项一样.
您可能已经知道,[...]
在shell中允许从一组字符进行匹配.也就是说,给定文件:
$ ls
fileA fileB fileC fileD
Run Code Online (Sandbox Code Playgroud)
跑步ls file[AB]
会产生:
fileA fileB
Run Code Online (Sandbox Code Playgroud)
所以在你的表达中,mnt:[1234]
以类似的方式解释.
归档时间: |
|
查看次数: |
598 次 |
最近记录: |