为什么用[[-n $ var]]而不是[[$ var]]?

汤姆·黑尔

这个答案中,我有一些代码如下:

if [[ $ZSH_VERSION ]]; then

被编辑为:

if [[ -n $ZSH_VERSION ]]; then

更新:我刚刚看到编辑评论:

[[x]]直到最近才在zsh中起作用

我浏览了zsh发行说明,找不到对此的引用。

zsh首先允许哪个版本[[ x ]]

zsh5.5.1文档中CONDITIONAL EXPRESSIONS

为了实现兼容性,如果存在一个语法上不重要的单个参数(通常是变量),则将条件视为测试表达式是否扩展为非零长度的字符串。换句话说,[[$ var]]与[[-n $ var]]相同。建议尽可能使用第二种显式形式。

围绕着源代码树,

% grep -rl 'if there is a single argument' .
./Doc/Zsh/cond.yo
% git blame ./Doc/Zsh/cond.yo | grep 'if there is a single argument'
d082827c83 (Jun T             2014-05-18 22:03:35 +0900 198) For compat...

检查的git log结果表明代码更改比文档早一点:

commit 9d47e8398d299e53ffe4e7ddf3731d2fedae9948
...
Date:   Tue May 13 08:16:50 2014 -0700

    32609: [[ $var ]] behaves as [[ -n $var ]] for bash/ksh compatibility

ChangeLog文件到的映射git tag对我来说还不清楚,但它似乎zsh是第一个带有此更改的版本5.0.6(2014年8月28日星期四19:07:04 +0100)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Shell:为什么用[-n“ $ {VAR-}”]而不是[-n“ $ VAR”]?

为什么跟随输出`$ var`而不是`3`?

为什么要使用var而不是类型?

为什么不弃用var?

为什么 'var' % {1: 'variable'} 打印 'var' 而不是像 'var' % (1,) 那样引发异常 TypeError?

* var [n]与(* var)[n]之差

为什么用arr [:] [np.newaxis] .shape =(1,n)而不是(n,1)?

[“ $ var”] && $ var做什么?

什么时候使用Var而不是函数?

为什么var求值为int而不是double?

为什么 ++var++ 不是合法的 Javascript 表达式?

为什么var目录不是特定于用户的?

为什么返回PY_VAR0而不是数字

为什么[@(!var)类]返回'__NSCFNumber而不是'__NSCFBoolean'?

为什么我的var返回NaN而不是html结构?

为什么我的数组是 var int 类型而不是 var set of int?

为什么在 google.auth.OAuth 中使用 var {google} 而不是 var google

为什么用FloatBuffer而不是float []?

为什么用“ if(!! variable)”而不是“ if(variable)”?

为什么用em而不是px?

为什么用rgb而不是cmy?

为什么用n而不是b或d或什么都不会改变此脚本中sed的行为?

Python - “虽然不是 var”

如果\ $ var不是\!

为什么此JavaScript命名函数表达式会使用var而不是不使用var引发异常

斯威夫特:什么时候应该使用“ var”而不是“ let”?

为什么在Scala中无法用`def`覆盖`var`?

var map=HashMap<Int,String>() 和 var map=HashMap<Int,String>(n) 有什么区别?

为什么编译器会推断var为动态而不是具体类型?