gpt4 book ai didi

linux - 使用 zparseopts 解析参数,但来自源脚本

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:13 25 4
gpt4 key购买 nike

我有一个 zsh 脚本 myscr.zsh,它获取另一个脚本 zparse.zsh,如下所示:

#!/usr/bin/zsh
# This is mysrc.zsh
. $HOME/slib/zparse.zsh FOO BAR # some parameters passed to zparse.zsh

zparse.zsh 需要可变数量的参数,这些参数不需要使用 zparseopt 进行解析,但 zparse.zsh 应该——除其他外——解析传递给 mysrc.zsh 的位置参数。这很棘手,因为 mysrc.zsh 有自己的 $ 副本,这与 zparse.zsh 中的 $ 不同。

为了让事情变得更加困难,zparseopt 按照设计总是解析 $*;我们不能告诉它使用不同的数组。

我知道我想要的有点像“吃蛋糕也吃”——我的zparse.zsh有自己的参数列表,但也想处理它的参数列表 parent 。

我目前的方法是这样的,但并不优雅:我定义了一个特殊的“魔法”参数(例如:%),已知它不会出现在给 zparse 的参数列表中.zsh。然后我像这样调用 zparse.zsh:

. zparse.zsh FOO BAR % "$@"

在 zparse 中,我首先将参数移到 $* 之外的魔术参数并放入一个本地数组,这让我得到“$@”,现在与调用脚本中的相同,并在此上使用 zparseopt .

我想知道是否有更简单的解决方案。例如,我能否以某种方式访问​​采购 shell 的 shell 变量(以及 $*)?我说的不是访问父进程的环境,因为我们这里是同一个进程。也许 zsh 及其所有优点都有一些有用的功能,我只是不知道?

最佳答案

您可以将外部脚本的 $@ 复制到另一个数组中并在 zparse.zsh 中使用它:

#!/usr/bin/zsh
outerargs=("$@")
. $HOME/slib/zparse.zsh FOO BAR

但是,在我看来,这比您当前的解决方案要差得多。事实上,我没有看到所谓的不优雅:zparse.zsh 明确说明了它所使用的值(与此答案中展示的魔术师的背后技巧相反)并且如果你选择好你的分隔符就没有歧义。

关于linux - 使用 zparseopts 解析参数,但来自源脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34593195/

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