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