Puteți construi comanda în o matrice:
#!/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
Și apoi rulați-l cu:
"${cmd[@]}"
Notați ghilimelele în jurul ultimei părți și a parantezei în jurul atribuțiilor de mai sus. Sintaxa este urâtă, dar funcționează în fața argumentelor care conțin spațiu alb și altele. (Folosiți ghilimele pentru a adăuga argumente cu spații, de ex. cmd+=("foo bar")
)
Corelate, cu metode mai puțin urâte și modalități prin care pot eșua:
În cazuri simple, ca acel argument opțional aici, ați putea scăpa de extinderea valorii alternative:
var=x myscript ${var:+"-a"} -b 76
Aici, ${var:+foo}
inserează foo
dacă var
nu este gol (deci var=ON
, var=FALSE
, var=x
l-ar insera cu toții) și nimic dacă este gol sau dezactivat (var=
sau unset var
). Aveți grijă la problemele obișnuite de citare.
Comentarii