Bash jelzők az if utasítások alapján [duplicate]

Erre a kérdésre már itt vannak válaszok :

Megjegyzések

Válasz

A parancsot a tömb:

#!/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 

Ezután futtassa a következővel:

"${cmd[@]}" 

Vegye figyelembe az idézeteket az utolsó rész körül, és a zárójel a fenti feladatok körül. A szintaxis csúnya, de a szóközöket és másokat tartalmazó érvek mellett működik. (Használjon idézőjeleket szóközökkel való argumentumok hozzáadásához, pl. cmd+=("foo bar"))

Kapcsolódó, kevésbé csúnya módszerekkel és kudarcokkal:


Egyszerű esetekben, mint például ez az opcionális argumentum, megúszhatja az alternatív értékbővítést:

var=x myscript ${var:+"-a"} -b 76 

Itt ${var:+foo} beilleszt foo ha var nem üres (tehát var=ON, var=FALSE, var=x mind beillesztené) , és semmi, ha üres vagy nincs beállítva (var=, vagy unset var). Legyen óvatos a szokásos idézési kérdésekkel.

Megjegyzések

  • +1 Ez a szintaxis csúnya és összetettebb, de a megoldás skálázható, miközben megoldásom egyszerűbb, de gyorsan rendetlenné válna, ha több zászló kombinációt fontolgatnának.
  • Köszönöm! Pontosan azt, amit ' keresek!
  • @theta, hozzáadott egy másik opciót, egyet kevésbé csúnyán és hajlamosabbá válni rendetlenné, ha kibővítették. / ul>

Válasz

Ha jól értem:

var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi 

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük