Condicionalmente passe os parâmetros para um script

3

Eu tenho um script em execução no Linux que aceita alguns parâmetros.
Eu gostaria de fazer algo como:

if [[ $CONDITION == "true" ]]; then  
  script param1 --param2  
else
  script param1  
fi 

Eu gostaria de evitar o caminho de bifurcação do if.
Existe uma maneira mais ideal de passar o segundo parâmetro?

    
por Jim 30.05.2018 / 10:03

3 respostas

10

A maneira mais limpa provavelmente seria usar uma matriz para manter o (s) parâmetro (s) opcional (is):

params=()
if [[ $CONDITION == true ]]; then
    params+=(--param2)
fi
script param1 "${params[@]}"

Ou na forma abreviada:

[[ $CONDITION == true ]] && params+=(--param2)
script param1 "${params[@]}"

Isso evita a repetição da parte constante do comando.

Observe que é importante fazer isso com uma matriz: se você substituir a matriz por uma variável regular ( params="--param2"; script param1 $params ), terá que expandir a variável sem aspas, com todos os problemas que a traz ou expandi-la. , nesse caso, você passará uma string vazia como argumento se a variável estiver vazia.

    
por 30.05.2018 / 10:17
4

Uma maneira versátil de fazer isso é definir os argumentos em uma matriz. O array mais básico é a lista de parâmetros posicionais definidos com set . Você pode construir a lista de parâmetros em sequência.

set -- param1
if [[ $CONDITION == "true" ]]; then  
    set -- "$@" --param2  
fi 

command "$@"  

Que pode ser reduzido para:

set -- param1
[[ $CONDITION == "true" ]] && set -- "$@" --param2
command "$@"  

Se a lista de parâmetros posicionais precisar ser preservada, então:

  • Use uma função:

    callcommand(){     set -- param1
                       [[ $CONDITION == "true" ]] && set -- "$@" --param2
                       command "$@"       
                 }
    callcommand
    
  • Ou use outra variável de matriz:

    paramArray=()
    paramArray+=(param1)
    [[ $CONDITION == "true" ]] && paramArray+=( "--param2" )
    command "${paramArray[@]}"
    
por 30.05.2018 / 10:21
-1
PARAMS+=" param1"
if [[ $CONDITION == "true" ]]; then  
  PARAMS+=" --param2"
fi
script ${PARAMS}
    
por 30.05.2018 / 12:15