如何避免多个OR语句bash

时间:2016-03-04 12:46:21

标签: bash if-statement grep

我有使用grep搜索的参数的GUI检查列表。检查列表时 - 此参数应显示在grep控件选项中。

例如:

w=TRUE or FALSE
s=TRUE or FALSE
N=TRUE or FALSE
L=TRUE or FALSE

我想使用检查表选择的所有组合,例如:

if [ "$w" == TRUE ]; then

grep -w searsch_pattern INFILE


elif [ "$w" == TRUE ] && [ "$s" == TRUE ];then

grep -w -s searsch_pattern INFILE

....

fi

我的问题是如果有可能避免编写所有组合elif语句并找到一些更优雅的解决方案。

PS:我想在grep搜索中使用四个以上的输出控制参数。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

通常,不,除非每个标志的效果是独立的。您可以尝试在数组中构建grep的参数。例如:

grep_options=()
if [ $w == TRUE ]; then
    grep_options+=( -w  )
fi

if [[ $s == TRUE ]]; then
    grep_options+=(-s)
fi

# etc.

grep "${grep_options[@]}" search_pattern INFILE

答案 1 :(得分:1)

对于您的示例中的单个选项,您可以尝试:

w=TRUE 
s=TRUE
N=FALSE
L=TRUE

for opt in w s N L; do
  [[ ${!opt} == "TRUE" ]] && options+=" -${opt}"
done

grep "${options}" searchpattern INFILE