Du kan bygge kommandoen i en matrise:
#!/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
Og kjør den med:
"${cmd[@]}"
Legg merke til anførselstegnene rundt den siste delen, og parentesen rundt oppgavene over. Syntaksen er stygg, men den fungerer i møte med argumenter som inneholder hvite mellomrom og slikt. (Bruk anførselstegn for å legge til argumenter med mellomrom, f.eks. cmd+=("foo bar")
)
Relatert, med mindre stygge metoder og måter de kan mislykkes på:
I enkle tilfeller, som det valgfrie argumentet her, kan du komme unna med den alternative verdiutvidelsen:
var=x myscript ${var:+"-a"} -b 76
Her setter ${var:+foo}
inn foo
hvis var
er ikke tom (så var=ON
, var=FALSE
, var=x
vil alle sette den inn) , og ingenting hvis det er tomt eller usett (var=
, eller unset var
). Vær forsiktig med vanlige siteringsproblemer.
Kommentarer
Hvis jeg forstår deg riktig:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi