编写可以容纳多个“或”条件的 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 ' ' ,- 打印逗号分隔的数组

相关内容