ArgcSkill using-argc-argcfile

Argc是一个Bash命令行框架,它使用特殊的注释驱动语法来提供一个命令运行器和参数解析器,用于创建和修改需要特殊语法的Argcfiles。

DevOps 0 次安装 0 次浏览 更新于 3/3/2026

以下是内容的中文翻译:


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。第一行是简短描述,随后的注释行如果不是注释标签,则是长描述。

进一步文档