set-$ args`行在这里做什么,为什么它在Zsh和Bash之间表现不同?

暗话者

getoptMac OSX随附的该版本的手册中,给出了一个使用construction的示例args=$(getopt optstring $*); set -- $argsset -- $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的分词行为不同,还是其他原因?我尝试使用引号和参数扩展标志的不同组合,但无法真正弄清楚这两种外壳的底层情况。

cuonglm

set -- $args根据的内容设置位置参数$args现在,您将获得zsh与其他POSIX shell之间不同的行为

由于默认情况下zsh不执行字段拆分,因此您将获得一个字符串,它是的内容$args您必须显式调用split以获得与bash(以及其他POSIX shell)相同的行为

set -- ${=args}

bashField Splitting对的内容执行$args,得到四个字符串。您可以在之后检查$#以了解位置参数的数量set -- $args

请注意,在的情况下bash,您还应添加set -f来关闭globing。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

空* args-python在这里做什么?

来自分类Dev

CLD在这里做什么?

来自分类Dev

super()在这里做什么

来自分类Dev

“ // [[:: blank:]] /”在这里做什么?

来自分类Dev

getBean()方法在这里做什么?

来自分类Dev

super()在这里做什么

来自分类Dev

(void)(p)在这里做什么?

来自分类Dev

Ruby 代码“&:”在这里做什么

来自分类Dev

Python:%s 在这里做什么?

来自分类Dev

猫是做什么用的,在这里做什么?

来自分类Dev

为什么在这里我得到了不同的结果?

来自分类Dev

为什么`==`在zsh和bash中的[[...]`内部表现不同?

来自分类Dev

set -u在bash脚本中做什么?

来自分类Dev

为什么 PIL 和 matplotlib 在这里创建完全不同的图像?

来自分类Dev

为什么在这里不确定?

来自分类Dev

为什么在这里的盒子?

来自分类Dev

为什么WlanOpenHandle()在这里失败?

来自分类Dev

为什么在这里发生僵局

来自分类Dev

为什么在这里使用锁?

来自分类Dev

为什么$ .isEmptyObject在这里无效

来自分类Dev

为什么python在这里运行?

来自分类Dev

为什么使用原子在这里?

来自分类Dev

为什么在这里需要'break;'?

来自分类Dev

为什么WlanOpenHandle()在这里失败?

来自分类Dev

为什么在这里抛出异常?

来自分类Dev

为什么$ .isEmptyObject在这里无效

来自分类Dev

为什么在这里得到NullPointerException?

来自分类Dev

为什么不会 for ... 在这里循环?

来自分类Dev

为什么python在这里运行?