[英]bash shell scripting: conditional string concatenation
我想有條件地將文本提交到另一個 shell 腳本中。 這意味着我想在 deb=1 的情況下用“INFO”替換“WARNING”:
#!/usr/bin/env bash
...
if [[ $abc -lt 98 ]] || [[ $deb -eq 1 ]]
then
./discord.sh --webhook-url=$url --text "WARNING: $abc"
fi
我還想避免另一個完整的 IF 語句。 我希望有類似的東西
deb=1 ? "INFO" : "WARNING"
那樣有用嗎? 如果是,完整的陳述會是什么樣子? “ - 文本...”
先感謝您。
你的意思是這樣的?
[[ $abc -lt 98 ]] && {
./discord.sh --webhook-url=$url --text "$([[ $deb -eq 1 ]] && echo "INFO" || echo "WARNING"): $abc"
}
將其視為if
then
else
fi
的替代方案(僅當您有更多命令時才需要大括號,但無論如何我都喜歡使用它,以提高可讀性(在某些情況下)。
基本上是
[[ condition ]] && { commands if true } || { commands if false }
請你試試:
if (( abc < 98 || deb == 1 )); then
loglevel=$( (( deb == 1 )) && echo "INFO" || echo "WARNING" )
./discord.sh --webhook-url=$url --text "$loglevel: $abc"
fi
可以使用數組索引來匹配帶有名稱字符串的數字日志級別:
#!/usr/bin/env bash
abc=50
deb=3
url=https://example.com/hook
logLevel=(WARNING INFO)
[ $abc -lt 98 ] && echo ./discord.sh --webhook-url=$url --text "${logLevel[1==deb]}: $abc"
恕我直言,@tshiono 的答案是最好的。 但是,它變得難以閱讀/調試。
為什么不使用詳細的解決方案?
當這兩個條件都為真時,您希望使用 INFO 進行記錄。
if ((deb==1 )); then
./discord.sh --webhook-url="$url" --text "INFO: $abc"
elif ((abc < 98)); then
./discord.sh --webhook-url="$url" --text "WARNING: $abc"
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.