繁体   English   中英

为什么bash中的空字符串变成了-n表达式

[英]Why is empty string changed into -n expression in bash

采取这个片段:

$ [[ ""=="foo" ]] && echo yes || echo no
+ [[ -n ==foo ]]
+ echo yes
yes

[[ ""=="foo" ]]如何变成[[ -n ==foo ]]

RC 当然在==周围缺少空格 - 添加它们后,它按预期工作:

$ [[ "" == "foo" ]] && echo yes || echo no
+ [[ '' == \f\o\o ]]
+ echo no
no

但我仍然不明白为什么它会这样?

它不会将空字符串更改为-n

字符串""=="foo"等同于字符串==foo 跟踪 output 始终以最简单的格式显示字符串,没有不必要的引号。

如果字符串不为空,则仅包含不带运算符的单个字符串的条件表达式为真。 这就是-n运算符测试的内容,因此-x扩展以这种方式显示。

前面或后面没有运算符的任何操作数都被视为具有与-n <operand>相同的操作。 操作符也需要用空格来区分。 要获得运算符列表,请运行help test 同时运行help [[以查看关键字与[test内置函数有何不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM