你能告訴我這個腳本有什么問題嗎?
if [[ " ${all[*]} " =~ " gcc " && \
" ${all[*]} " =~ " release " && \
false ]]
then
additional_opts="gpu-compute-sanitizers"
else
additional_opts=
fi
false來自 GitHub 擴展,而.yaml檔案中的實際腳本是:
if [[ " ${all[*]} " =~ " gcc " && \
" ${all[*]} " =~ " release " && \
${{contains(github.event.pull_request.body, '[GPU Compute Sanitizers]')}} ]]
then
additional_opts="gpu-compute-sanitizers"
else
additional_opts=
fi
此腳本的問題在于第一個分支被采用 ( additional_opts="gpu-compute-sanitizers"),而拉取請求正文不包含關鍵字。
all是像選項陣列gcc和release或其他什么東西(clang,debug,等)。
運行 GitHub 操作服務的作業系統是 Ubuntu 18.04。
uj5u.com熱心網友回復:
問題是,在 bash 條件運算式的背景關系中,false是真的。或者更確切地說,bash 沒有為字串 "false" 分配任何特殊含義,它只是像對待任何其他字串一樣對待。在條件運算式中,一個普通字串被視為好像它是-n("is this string nonblank") 運算子的目標,并且由于 "false" 確實是非空白,結果顯示為 true。
從bash 檔案:
-n字串
字串
真要是的長度字串是非零的。
這是一個快速演示:
$ [[ true ]] && echo yes || echo no
yes
$ [[ false ]] && echo yes || echo no
yes
$ [[ wibble ]] && echo yes || echo no
yes
$ [[ "" ]] && echo yes || echo no
no
簡單的解決辦法:測驗看看結果是否是字串“true”:
if [[ " ${all[*]} " =~ " gcc " && \
" ${all[*]} " =~ " release " && \
${{contains(github.event.pull_request.body, '[GPU Compute Sanitizers]')}} = true ]]
then
(注意:我假設運算式的計算結果為“真”或“假”;如果它可能計算出其他結果,您可能需要使用更復雜的測驗。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/348043.html
標籤:linux 猛击 github ubuntu-18.04 逻辑运算符
上一篇:使用直到回圈監控多個行程
