在getopt
Mac OSX随附的该版本的手册中,给出了一个使用construction的示例args=$(getopt optstring $*); set -- $args
。set -- $args
在这里做什么?
此外,请考虑功能和测试字符串
f () {
args=$(getopt o: $*)
set -- $args
for i; do
echo $i
done
}
f -o 123 xyz
在Bash 3.2和4.3中,这会产生
-o
123
--
xyz
但在Zsh 5.1中,它会产生
-o 123 -- xyz
是什么原因导致差异?是因为Zsh的分词行为不同,还是其他原因?我尝试使用引号和参数扩展标志的不同组合,但无法真正弄清楚这两种外壳的底层情况。
set -- $args
根据的内容设置位置参数$args
。现在,您将获得zsh
与其他POSIX shell之间不同的行为。
由于默认情况下zsh
不执行字段拆分,因此您将获得一个字符串,它是的内容$args
。您必须显式调用split以获得与bash
(以及其他POSIX shell)相同的行为:
set -- ${=args}
bash
Field Splitting
对的内容执行$args
,得到四个字符串。您可以在之后检查$#
以了解位置参数的数量set -- $args
。
请注意,在的情况下bash
,您还应添加set -f
来关闭globing。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句