Tato otázka již má odpovědi zde : 
Komentáře
- Zahrnuto v Ale co když…?
Odpověď
Příkaz můžete vytvořit v pole:
#!/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 poté jej spusťte pomocí:
"${cmd[@]}"  Poznamenejte si uvozovky kolem poslední části a závorky kolem přiřazení výše. Syntaxe je ošklivá, ale funguje tváří v tvář argumentům obsahujícím prázdné znaky a podobně. (Pomocí uvozovek přidejte argumenty s mezerami, např. cmd+=("foo bar")) 
Související, s méně ošklivými metodami a způsoby, jak mohou selhat:
V jednoduchých případech, jako je tento jeden volitelný argument, by vám mohlo uniknout rozšíření alternativní hodnoty:
var=x myscript ${var:+"-a"} -b 76  Zde ${var:+foo} vloží foo pokud var není prázdný (takže var=ON, var=FALSE, var=x by jej všichni vložili) , a nic, pokud je prázdné nebo neaktivní (var= nebo unset var). Při obvyklých problémech s citováním buďte opatrní. 
Komentáře
- +1 Tato syntaxe je ošklivá a je složitější, ale řešení je škálovatelné, zatímco moje řešení je jednodušší, ale rychle by se vyvinulo v nepořádek, pokud by se mělo uvažovat o více kombinacích příznaků.
- Díky! Přesně to, co ' m hledám!
- @theta, přidala další možnost, jednu méně ošklivou a náchylnější k tomu, aby se po rozbalení rozcuchala.
Odpověď
Pokud vám rozumím správně:
var=ON if [ "$var" = "ON" ]; then /home/username/myscript -a -b 76 else /home/username/myscript -b 76 fi