Erre a kérdésre már itt vannak válaszok :
Megjegyzések
- Lefedett a De mi van, ha…?
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