gpt4 book ai didi

linux - 使用带有 --parseopt 的 git rev-parse 访问 shell 脚本中的命名参数

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

--parseopt 选项与 git rev-parse 一起使用时,它会输出一个可以传递给 eval 的字符串,例如

set -- --foo --bar=arg 'test' --

通过 eval 运行此命令后,它将 $1 设置为“--foo”,将 $2 设置为“--bar=arg”,将 $3 设置为“test”。我的问题是,除了设置允许我的脚本按名称访问选项的位置参数之外,set 命令是否有任何魔力?或者我是否必须手动循环参数并自己检查名称?

最佳答案

没有魔法,但您可以将eval 的内容更改为其他内容,这样您就可以通过名称访问。例如:

$ eval `git rev-parse --foo --bar=arg | sed -r 's/--//g; /^[^=]+$/s/$/=/'
$ echo $bar
arg
$ [[ ${foo+t} ]] && echo y
y
$ if [[ ${baz+t} ]]; then echo y; else echo n; fi
n

sed 删除前导 -- 并且对于没有 = 的行,在末尾添加一个。当 shell 评估像 foo= 这样的行时,它会将名为 foo 的变量设置为空字符串。您可以测试 foo 是否设置为 [[ ${foo+t} ]] (t 是任意的,我选择 t 作为 true 的助记符)。您还可以在 sed 中将变量设置为某个标记值,然后使用简单的 [[ $foo ]] 测试。

根据您需要支持的各种参数,您可能需要调整 sed。使用 set -xv 将向您显示正在发生的一切,以便您进行更改:

$ set -xv
$ eval `git rev-parse --foo --bar=arg | sed -r 's/--//g; /^[^=]+$/s/$/=/'`
eval `git rev-parse --foo --bar=arg | sed -r 's/--//g; /^[^=]+$/s/$/=/'`
git rev-parse --foo --bar=arg | sed -r 's/--//g; /^[^=]+$/s/$/=/'
++ sed -r 's/--//g; /^[^=]+$/s/$/=/'
++ git rev-parse --foo --bar=arg
+ eval foo= bar=arg
foo= bar=arg
++ foo=
++ bar=arg

关于linux - 使用带有 --parseopt 的 git rev-parse 访问 shell 脚本中的命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35395382/

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