$==*
我在我使用的几个 zsh 解决方案中发现了这个习惯用法。好像相当于$argv
。但我不知道它是如何解释的。你能解释一下吗?
答案1
这是 Zsh 的其中之一参数扩展这里适用于$*
:
${=spec}
在spec的评估过程中使用SH_WORD_SPLIT的规则执行分词,但无论参数是否出现在双引号中;如果“=”加倍,则将其关闭。这会强制参数扩展在替换之前被分割成单独的单词,并使用 IFS 作为分隔符。在大多数其他 shell 中,这是默认完成的。
请参阅吉尔斯典型的彻底回答什么是分词?为什么它在 shell 编程中很重要用于上下文。
通常,zsh
默认情况下不会进行单词拆分,因此据推测,这是为了确保即使以某种方式启用$*
该选项(例如通过 a )也不会拆分。SH_WORD_SPLIT
emulate sh
但是,在大多数情况下,您宁愿使用"$@"
(请注意此处很重要的引号)而不是$==*
. $==*
(就像关闭$*
时一样)仅扩展到SH_WORD_SPLIT
非空位置参数, while"$@"
扩展为所有位置参数(无论SH_WORD_SPLIT
, 并且适用于所有类似 Bourne 的 shell)。