以下是内容的中文翻译:
name: 使用-argc-argcfile
description: 创建和修改需要特殊语法的Argcfiles。当编辑Argcfile.sh、@argc或任何包含argc --argc-eval的shell脚本时使用。
Argc
Argc 是一个Bash命令行框架,它使用特殊的注释驱动语法来提供一个命令运行器和参数解析器。
这是一个简单的Argcfile.sh示例:
# @describe 示例Argcfile
# 这里列出的参数、选项和标志适用于主命令和所有子命令。
#
# 关于argc的更多信息,请访问 https://github.com/sigoden/argc
# @option --name 打招呼的名字
# @flag -F --foo 标志参数
# @option --bar 选项参数
# @option --baz* 选项参数(多重出现)
# @arg val* 位置参数
main() {
echo foo: $argc_foo
echo bar: $argc_bar
echo baz: ${argc_baz[@]}
echo val: ${argc_val[@]}
}
if ! command -v argc >/dev/null; then
echo "此命令需要argc。从 https://github.com/sigoden/argc 安装" >&2
exit 100
fi
eval "$(argc --argc-eval "$0" "$@")"
用一些示例参数运行脚本:
./example.sh -F --bar=xyz --baz a --baz b v1 v2
Argc解析这些参数并创建以argc_为前缀的变量:
foo: 1
bar: xyz
baz: a b
val: v1 v2
你也可以运行./example.sh --help来查看为你的CLI自动生成的帮助信息。
Bash 习语
使用Bash习语与argc一起工作。例如,shellcheck不知道argc_foo变量,所以对于需要的值和argc已知提供默认值的值,更喜欢使用${argc_foo:?}。对于其他的,使用${argc_foo:-default},视情况而定。
Argcfile.sh
注意,直接运行argc会尝试在当前和父目录中找到一个名为Argcfile.sh的文件。在这种情况下,argc总是会在执行之前cd到包含Argcfile的目录,$ARGC_PWD会被设置为用户运行命令的目录。
注释标签
注释标签是标准的Bash注释,前面加上@和一个特定标签。它们为Argc提供指令,配置脚本的功能。
| 标签 | 描述 |
|---|---|
@describe |
设置命令的描述。 |
@cmd |
定义子命令。 |
@alias |
设置子命令的别名。 |
@arg |
定义位置参数。 |
@option |
定义选项参数。 |
@flag |
定义标志参数。 |
@env |
定义环境变量。 |
@meta |
添加元数据。 |
一些常见形式:
# @arg va
# @arg vb! 必需
# @arg vc* 多值
# @arg vd+ 多值 + 必需
# @arg vna <PATH> 值表示法
# @arg vda=a 默认
# @arg vdb=`_default_fn` 从bash函数默认
# @arg vca[a|b] 选择
# @arg vcb[=a|b] 选择 + 默认
# @arg vcc*[a|b] 多值 + 选择
# @arg vcd+[a|b] 必需 + 多值 + 选择
# @arg vfa[`_choice_fn`] 从bash函数选择
# @arg vfb[?`_choice_fn`] 从bash函数选择 + 无验证
# @arg vfc*[`_choice_fn`] 多值 + 从bash函数选择
# @arg vfd*,[`_choice_fn`] 多值 + 从bash函数选择 + 逗号分隔列表
# @arg vxa~ 捕获所有剩余参数
# @arg vea $$ 绑定环境变量
# @arg veb $BE <PATH> 绑定命名环境变量
# @option --oa
# @option -b --ob 短
# @option -c 短只
# @option --of*, 多出现 + 逗号分隔列表(也支持@arg的所有其他模式)
# @option --ona <PATH> 值表示法
# @option --onb <FILE> <FILE> 两个参数值表示法
# @option --onc <CMD> <FILE+> 无限参数值表示法
# @option --oda=a 默认
# @option --odb=`_default_fn` 从bash函数默认
# @option --oca[a|b] 选择(支持@arg的所有模式)
# @option --ofa[`_choice_fn`] 从bash函数选择(支持@arg的所有模式)
# @option --oxa~ 捕获所有剩余参数
# @option --oea $$ 绑定环境变量
# @option --oeb $BE <PATH> 绑定命名环境变量
# @flag --fa
# @flag -b --fb 短
# @flag -c 短只
# @flag --fd* 多出现
# @flag --ea $$ 绑定环境变量
# @flag --eb $BE 绑定命名环境变量
# @env EA 可选
# @env EB! 必需
# @env EC=true 默认
# @env EDA[dev|prod] 选择
# @env EDB[=dev|prod] 选择 + 默认
对于_choice_fn,它应该打印候选项,每行一个。_choice_fn和_default_fn*必须是bash函数,它们不是任意命令。"绑定环境变量"意味着变量默认来自环境。对于环境变量,argc不创建argc_变量(只验证现有变量)。
最常见的@meta选项:
- 在脚本的顶层设置版本:
@meta version 1.0.0 - 要求安装工具(可在顶层和子命令中使用):
@meta require-tools git,yq
在脚本的顶层使用@describe,对于子命令使用@cmd。第一行是简短描述,随后的注释行如果不是注释标签,则是长描述。
进一步文档
- Specification 用于所有注释标签的语法和用法规范。
- Variables 由argc预定义的变量。
- Examples 特别复杂的场景示例。