set -- 带 $string 和 "$string" 的参数

问题描述 投票:0回答:1

比较

$string
"$string"

string="xx yy zz"
if [[ $string == "$string" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

我们得到:字符串是相等的。

set  -- $string
echo $#
3

使用

$string
设置参数可获得 3 个参数。

set  -- "$string"
echo $#
1

使用

"$string"
设置参数可获得 1 个参数。
是什么导致了这种差异?

bash set double-quotes
1个回答
0
投票

产生这种差异是因为

[[
超级非常非常神奇。它是 bash 中解析输入时处理的语法糖,而不是真正的命令。根据上下文的不同,
[[
内部的引用含义略有不同。在 == 的情况下,可以省略 qoutes,因此字符串是相等的。

相反,

[
test
是正常命令。您可以检查以下内容如何失败:

[ $string == "$string" ]

小提示,实际的比较运算符只是

=
,但 bash 处理也
==
相同。

© www.soinside.com 2019 - 2024. All rights reserved.