在 bash 中使用 -z 测试有优势吗?

Ric*_*man 5 bash

从man test:

       ! EXPRESSION
              EXPRESSION is false
Run Code Online (Sandbox Code Playgroud)

和

       -n STRING
              the length of STRING is nonzero

       STRING equivalent to -n STRING

       -z STRING
              the length of STRING is zero
Run Code Online (Sandbox Code Playgroud)

因此与(上面明确指出的)[ "$x" ]具有相同的效果,并且隐式地与 具有相同的效果。那么,为什么人们会选择使用或者可以说其他形式更清晰呢?这只是个人喜好还是我错过了一个重要的区别?[ -n "$x" ][ ! "$x" ][ -z "$x" ]-n-z

我见过关于此的其他问题(例如这个问题),但没有什么可以确定它们是否在功能上相同。$x我确实想知道如果我使用-nor是否可以避免引用,-z但如果$x包含空格,则与其他方法一样会失败。

Kam*_*Cuk 9

在 bash 中使用 -z 测试有优势吗?

不。

当可以说其他形式更清晰时,为什么人们会选择使用 -n 或 -z ?

因为哪种形式“更清晰”是有争议的......

当然-n, 和-z更好,因为-z和 类似“零”,并且-n类似于“非零”或“非空”,所以我更容易阅读它。[ -n "$x" ]是“如果$x非零”。我推荐*-n和-z.

难道只是个人喜好

是的。

我错过了一个重要的区别吗?

不。

[[如果您不需要 POSIX 兼容性,则更喜欢 Bash 。

我确实想知道如果我使用 -n 或 -z 是否可以避免引用 $x

不。如果您使用 ,则可以避免引用[[。我建议*无论如何都要引用每个扩展,以习惯于始终引用,以减少意外错误。

* - 这只是一个建议,而不是限制。如果您向我发送带有[ ! "$x" ]或 的代码[[ $x ]],我将不会眨眼两次。但如果你送来[ $x ]烟,我的耳朵就会冒出来。