Parametri opzionali nella funzione bash


12

Ho una funzione per creare rapidamente un nuovo ramo SVN che assomiglia a questo

function svcp() { svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m "dev branch for $2"; }

Che uso per creare rapidamente una nuova filiale senza dover cercare e copiare incollare gli indirizzi e altre cose. Tuttavia, per il messaggio (opzione -m), vorrei averlo in modo che se fornissi un terzo parametro che venga utilizzato come messaggio, altrimenti verrà utilizzato il messaggio "predefinito" di "ramo dev per $ 2". Qualcuno può spiegare come è fatto?

Risposte:


20
function svcp() { 
    msg=${3:-dev branch for $2}
    svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m "$msg";
}

la variabile msgè impostata su $3se $3non è vuota, altrimenti è impostata sul valore predefinito di dev branch for $2. $msgviene quindi utilizzato come argomento per -m.


3

dalla pagina man di bash:

 ${parameter:-word}
          Use Default Values.  If parameter is unset or null, the expansion of word is substituted.  Otherwise, the value of parameter is substituted.

nel tuo caso, useresti

$ function svcp () {
  def_msg = "ramo dev per $ 2"
  echo svn copy "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 exciting_new_stuff
svn copia repoaddress / branch / 2.0.x repoaddress / branch / dev / exciting_new_stuff -m "dev branch for exciting_new_stuff"

$ svcp 2 exciting_new_stuff "ricetta segreta per il dominio del mondo"
svn copia repoaddress / branch / 2.0.x repoaddress / branch / dev / exciting_new_stuff -m "ricetta segreta per il dominio del mondo"
$

puoi rimuovere il comando echo se sei soddisfatto dei comandi svn che vengono generati

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.