Puede compilar el comando en una matriz:
#!/bin/bash var=ON cmd=( /home/username/myscript ) # create array with one element if [ "$var" == "ON" ]; then cmd+=( -a ) # append to the array fi cmd+=( -b 76 ) # append two elements
Y luego ejecútelo con:
"${cmd[@]}"
Tenga en cuenta las comillas alrededor de la última parte y el paréntesis alrededor de las tareas anteriores. La sintaxis es fea, pero funciona frente a argumentos que contienen espacios en blanco y demás. (Use comillas para agregar argumentos con espacios, por ejemplo, cmd+=("foo bar")
)
Relacionados, con métodos menos feos y formas en las que pueden fallar:
En casos simples, como ese argumento opcional aquí, puede salirse con la expansión de valor alternativo:
var=x myscript ${var:+"-a"} -b 76
Aquí, ${var:+foo}
inserta foo
if var
no está vacío (por lo que var=ON
, var=FALSE
, var=x
lo insertarían todos) y nada si está vacío o sin configurar (var=
o unset var
). Tenga cuidado con los problemas habituales de citas.
Comentarios
Si te entiendo correctamente:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi