Bash-flag baseret på if-udsagn [duplikat]

Dette spørgsmål har allerede svar her :

Kommentarer

Svar

Du kan bygge kommandoen i en matrix:

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

Og kør den derefter med:

"${cmd[@]}" 

Bemærk citaterne omkring den sidste del og parentesen omkring opgaverne ovenfor. Syntaksen er grim, men den fungerer i lyset af argumenter, der indeholder hvidt rum og sådan. (Brug anførselstegn for at tilføje argumenter med mellemrum, f.eks. cmd+=("foo bar"))

Relateret, med mindre grimme metoder og måder, de kan mislykkes på:


I enkle tilfælde, som det valgfri argument her, kan du slippe af sted med den alternative værdiudvidelse:

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

Her indsætter ${var:+foo} foo hvis var er ikke tom (så var=ON, var=FALSE, var=x vil alle indsætte den) , og intet, hvis det er tomt eller ikke indstillet (var= eller unset var). Vær forsigtig med de sædvanlige citatproblemer.

Kommentarer

  • +1 Denne syntaks er grim, og den er mere kompleks, men løsningen er skalerbar, mens min løsning er enklere, men ville hurtigt udvikle sig til et rod, hvis flere flagkombinationer skulle overvejes.
  • Tak! Præcis hvad jeg ' jeg leder efter!
  • @theta, tilføjede en anden mulighed, en mindre grim og mere tilbøjelig til at blive rodet, hvis den blev udvidet.

Svar

Hvis jeg forstår dig korrekt:

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *