Kommentit
- Katettu Mutta entä jos…?
vastaus
Voit rakentaa komennon taulukko:
#!/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
Ja suorita sitten se:
"${cmd[@]}"
Huomaa lainaukset viimeisen osan ympärillä ja sulkeet yllä olevien tehtävien ympärillä. Syntaksi on ruma, mutta se toimii argumenttien edessä, jotka sisältävät tyhjää tilaa ja vastaavaa. (Lisää lainausmerkkejä argumenttien lisäämiseen välilyönneillä, esim. cmd+=("foo bar")
)
Liittyy, vähemmän rumiin menetelmiin ja tapoihin, joilla ne voivat epäonnistua:
- Kuinka voimme suorittaa muuttujaan tallennetun komennon?
- Shellin käyttäminen muuttujat komentovaihtoehdoille
Yksinkertaisissa tapauksissa, kuten yksi valinnainen argumentti täällä, voit päästä eroon vaihtoehtoisen arvon laajennuksesta:
var=x myscript ${var:+"-a"} -b 76
Täällä ${var:+foo}
lisää foo
if var
ei ole tyhjä (joten var=ON
, var=FALSE
, var=x
lisäisivät sen) , eikä mitään, jos se on tyhjä tai määrittelemätön (var=
tai unset var
). Ole varovainen tavallisten lainausongelmien suhteen.
Kommentit
- +1 Tämä syntaksi on ruma ja monimutkaisempi, mutta ratkaisu on skaalautuva, kun taas ratkaisuni on yksinkertaisempi, mutta muuttuisi nopeasti sotkuiseksi, jos harkittaisiin enemmän lippujen yhdistelmiä.
- Kiitos! Tarkalleen mitä ' m etsin!
- @theta, lisäsi toisen vaihtoehdon, yhden vähemmän ruman ja alttiimman sotkuiselle, jos sitä laajennettiin.
Vastaa
Jos ymmärrän sinut oikein:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi