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