在我的工作流中進行下一個sep之前,需要對兩個環境變量進行同樣的檢查
- name: version check
env:
version_in_code : "v$(poetry version -s)"
version_in_tag : $(git describe --exact-match --tags $(git log -n1 --pretty='%h'))
version_is_equal: ${{ env.version_in_code != env.version_in_tag }}
run: |
if [ ${{ env.version_is_equal }} ]; #here comes the error
then
echo " ${{ env.version_in_tag }} will be released"
else
git push -d origin ${{ env.version_in_tag }}
echo "⛔? Tag-version: ${{ env.version_in_tag }} and Code-version: ${{ env.version_in_code are NOT equivalent"
exit 1
fi
在if條件檢查中不允許使用$env.version_is_equal
,錯誤消息非常令人困惑:Unexpected symbol: 'are'
如何解決這個問題?
Gui指出了語法問題,但也存在Bash問題:
是
[ true ]
或[ false ]
。這將始終計算為true
,因為構造會檢查它是否包含non-empty字符串;它不關心字符串是true
還是false
。然后,可以將
${{ env.version_is_equal }}
替換為$version_is_equal
;沒什么區別,但更方便。要修復比較,您必須與字符串進行比較:
或將其作為命令運行(不帶
[ ... ]
),雖然較短,但更具魔力:這是因為
true
和false
是返回成功/失敗退出狀態的命令。請注意
僅在使用時計算,而不是在分配時計算。在使用之前,它只是一個字符串。這可能是有意的,也可能不是有意的,但在我看來,將作業作為腳本本身的一部分更為明確: