aws s3api
为了让 bash shell 正确解释命令,需要在下面的 cli 命令中更改哪些具体语法?
该环境是一个 ubuntu 最新的 GitHub 运行程序,使用 bash shell 执行 GitHub 工作流程。
GitHub Ubuntu 运行程序中的中断命令是:
aws s3api put-object-tagging --bucket s3.bucket.name --key filename.tar.gz --tagging TagSet={Key=public,Value=yes}
抛出的错误是:
Unknown options: TagSet=Value=yes
相同的命令在使用 cmd.exe 的 Windows 笔记本电脑中完美运行,因此该代码是有效的 aws cli 命令。
该问题可能与 bash 中环境变量的 GitHub 工作流程语法有关,该语法类似于 ${envVarName}。或者还有其他问题吗?
答案1
你只需要引用你的论点:
aws s3api put-object-tagging --bucket s3.bucket.name --key filename.tar.gz \
--tagging "TagSet={Key=public,Value=yes}"
bash 中的语法{a,b,c}
表示大括号扩展:
大括号扩展是一种可以生成任意字符串的机制。这种机制类似于路径名扩展,但生成的文件名不需要存在。要展开大括号的模式采用可选的前导码的形式,后跟一系列逗号分隔的字符串或一对大括号之间的序列表达式,最后是可选的后脚本。前导码作为大括号内包含的每个字符串的前缀,然后将后记附加到每个结果字符串,从左到右扩展。 (来自
bash(1)
手册页)
所以如果我们写:
echo TagSet={Key=public,Value=yes}
我们得到输出:
TagSet=Key=public TagSet=Value=yes
通过引用该参数,我们可以抑制大括号扩展。