Możesz zbudować polecenie w tablica:
#!/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
A następnie uruchom ją za pomocą:
"${cmd[@]}"
Zwróć uwagę na cudzysłowy wokół ostatniej części i nawiasach wokół zadań powyżej. Składnia jest brzydka, ale działa w obliczu argumentów zawierających białe znaki i tym podobne. (Użyj cudzysłowów, aby dodać argumenty ze spacjami, np. cmd+=("foo bar")
)
Powiązane, z mniej brzydkimi metodami i sposobami ich niepowodzenia:
W prostych przypadkach, takich jak ten jeden opcjonalny argument tutaj, możesz uciec z alternatywnym rozwinięciem wartości:
var=x myscript ${var:+"-a"} -b 76
Tutaj ${var:+foo}
wstawia foo
if var
nie jest pusty (więc var=ON
, var=FALSE
, var=x
mogą to wszystko wstawić) i nic, jeśli jest pusty lub nieustawiony (var=
lub unset var
). Uważaj na zwykłe problemy z cytowaniem.
Komentarze
Jeśli dobrze Cię rozumiem:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi