Bash příznaky založené na if prohlášeních [duplikát]

Tato otázka již má odpovědi zde :

Komentáře

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 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *