我有以下文本,作為某些命令的輸出myscript.sh;
[
"string-1",
"string-2"
]
我已將輸出存盤到如下所示的某個變數中;
myarray=$(myscript.sh)
現在,value not present如果string-3陣列中不存在字串,我想回顯,類似于下面的代碼;
value="string-3"
if [[ ! " ${myarray[*]} " =~ " ${value} " ]]; then
echo "value not present"
fi
value not present即使該值存在,此代碼也會輸出。可以做些什么來解決這個問題?
提前致謝。
uj5u.com熱心網友回復:
該myarray變數是一個字串,可以使用正則運算式來判斷它是否包含指定的子字串。
myarray=([
"string-1",
"string-2"
])
value="string-3"
if [[ ! "$myarray" =~ .*"$value".* ]]; then
echo "value not present"
fi
uj5u.com熱心網友回復:
輸入是 JSON 陣列嗎?如果是這樣,您應該使用 JSON 感知工具(例如jq)來處理它。像這樣的東西:
if jq -e --arg value "$value" 'any(. == $value)' <<<"$myarray" >/dev/null; then
解釋:--arg value "$value"將shell變數復制value到jq同名變數中。<<<"$myarray"將該變數的值作為輸入傳遞(因為它不是 bash 陣列,所以[*]無關緊要)。如果任何陣列元素匹配,則過濾器any(. == $value)回傳,否則回傳。該選項告訴使用該結果作為其退出狀態,并丟棄文本輸出。由于使用命令的退出狀態作為其條件,這應該就是您所需要的。true$valuefalse-ejq>/dev/nullif
uj5u.com熱心網友回復:
改寫成這樣:
if [[ ! $myarray =~ $value ]]; then
echo "value not present"
fi
或者像這樣:
[[ $myarray =~ $value ]] || echo "value not present"
那些“”破壞了一切。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/376771.html
下一篇:如何創建動態陣列過濾器運算式?
