- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当 --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/
本文整理了Java中org.joda.time.tz.ZoneInfoCompiler.parseOptional()方法的一些代码示例,展示了ZoneInfoCompiler.parseOption
在我的项目中,我有一些包含使用默认值注册选项的内部配置结构(比方说 Config.x=0, Config.y=0),这些值不可修改客户。 有时我的应用程序的用户希望在解析命令行参数之前修改这些字段
当 --parseopt 选项与 git rev-parse 一起使用时,它会输出一个可以传递给 eval 的字符串,例如 set -- --foo --bar=arg 'test' -- 通过 ev
我是一名优秀的程序员,十分优秀!