編寫可以容納多個「或」條件的 if 語句

編寫可以容納多個「或」條件的 if 語句

我有一個場景,我正在創建一個新變量,該變量僅包含servces中可用值列表中的值filex

$ cat filex

all_name1_db
all_name2_dm
alm_service1_ax
all_name3_du
alz_name4_dx
ali_name5_dk
alk_service2_av
alf_name6_df
alj_name7_dq

這是我用來建立變數的程式碼services,該變數僅包含包含服務的值。

for x in $filex
do
 if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]];then
   Services+=$x","
 fi
done

我的最終結果將是如下所示的逗號分隔值。

$ cat $Services

alm_service1_ax,alk_service2_av

現在的問題是,service價值不斷增加filex,我無法if透過添加來擴展我的聲明||。例如,如果我有一項新服務bum_service3_bk包含在其中,filex那麼我的if聲明將如下所示。

...
 if [[ $x == *"service1"* ]] || [[ $x == *"service2"* ]] || [[ $x == *"service3"* ]] ;then
...

service並且對於每一個新添加的內容都會繼續增加filex

有沒有辦法編寫一個if語句來具有可以容納多個或條件的單一條件或任何更好的方法來解決我的問題?

答案1

避免循環處理文本。這裡:

grep 'service[123]' filex | paste -sd , -

或者:

grep 'service1
service2
service3' filex | paste -sd , -

答案2

如果您需要一行答案,請使用:

grep "service" filex | xargs echo | sed 's/ /, /g'

或者

如果您需要條件語法那麼您可以這樣做:

while read -r line
do
if [[ $line == *"service"* ]]
then
   Services+=("$line")
fi
done < "/tmp/filex"

echo "${Services[@]}" | tr ' ' ,

它會給出類似:

alm_service1_ax,alk_service2_av,alk_service5_av,alk_service3_aff,alk_service5_afds

/tmp/filex- 是你的檔案的路徑

echo "${Services[@]}" | tr ' ' ,- 列印逗號分隔的陣列

相關內容