gpt4 book ai didi

bash - `test -n $a` 和 `test -n "$a"` 之间的区别

转载 作者:行者123 更新时间:2023-11-29 09:17:59 25 4
gpt4 key购买 nike

$ a=""
$ test -n $a
$ echo $?
0
$ test -n a
$ echo $?
0
$ test -n "$a"
$ echo $?
1

它们有什么区别?为什么结果不同?

最佳答案

$a 为空时,test -n $a 展开为:

'test' '-n'

test 只接收一个这样的参数时,它会进行默认测试,这可能是您混淆的根源。默认测试与-n相同,即下面两个是等价的:

test string
test -n string

因此您的测试是字符串 -n 的长度是否大于零。它确实如此,因此您获得了 0 退出状态。

你的下一个例子:

'test' '-n' 'a'

测试文字字符串 a 的长度是否大于零。是的,所以您再次获得 0 退出状态。

最终测试可能是您一直想要的。它扩展为:

'test' '-n' ''

现在传递了两个参数,但第二个参数是空的,所以 -n 测试失败,你得到一个 1 退出状态。

结论

总是引用你的变量!


您可以使用 set -x 查看 shell 如何扩展您的语句:

$ set -x
$ test -n $a
+ test -n
$ test -n "$a"
+ test -n ''

关于bash - `test -n $a` 和 `test -n "$a"` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46300131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com