Bash-liput, jotka perustuvat if-lauseisiin [duplicate]

Tähän kysymykseen on jo annettu vastauksia :

Kommentit

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:


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 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *