簡體   English   中英

bash shell 腳本:條件字符串連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM