gpt4 book ai didi

bash - bash 条件表达式中的_string_ 和-n _string_ 有什么区别?

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

Bash 引用手册

[ string ]

[ -n string ]

如果 string 的长度不为 0,都将返回 true

但事实并非如此

greet=

if [ $greet ]; then
echo '1'
else
echo '2'
fi

if [ -n $greet ]; then
echo '1'
else
echo '2'
fi

输出是
2
1

Bash 引用手册只是说

-n string  
string

True if the length of string is non-zero.

那么,这两种形式之间的真正区别是什么?

最佳答案

正如@user1502952所说,你需要使用双引号;但让我解释一下为什么。假设你执行:

greet=
[ -n $greet ] && echo "it's nonblank"

当 shell 解析 [ -n $greet ] 部分时,它将 $greet 扩展为空字符串,然后进行分词。例如,如果 $greet 扩展为中间有空格的内容,它会将每个“单词”视为 [ 命令的单独参数。然而,在这种情况下,$greet 展开为空,它根本不包含任何“单词”,因此被视为 [ 的零参数——它实际上消失了从命令。所以 [ -n $greet ] 等同于 [ -n ]检查字符串“-n”是否为非空。它是,所以它的计算结果为真。

将其与 [ -n "$greet"] 进行比较:在这种情况下,双引号允许扩展 $greet,但防止分词。所以 [ 命令实际上得到了一个零长度的第二个参数,意识到 -n 应该是一个运算符,并得到了预期的答案。

关于bash - bash 条件表达式中的_string_ 和-n _string_ 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18809384/

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