Bash

bash 無法解釋在 GitHub Ubuntu 中使用花括號的 cli 命令

  • October 12, 2022

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}。還是有其他問題?

你只需要引用你的論點:

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

通過引用這個論點,我們禁止大括號擴展。

引用自:https://unix.stackexchange.com/questions/720618