Optionale Parameter in der Bash-Funktion

12

Ich habe eine Funktion zum schnellen Erstellen eines neuen SVN-Zweigs, der so aussieht

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

Womit ich schnell einen neuen Zweig erstelle, ohne die Adressen und einige andere Dinge nachschlagen und kopieren und einfügen zu müssen. Für die Nachricht (Option -m) möchte ich sie jedoch haben, damit, wenn ich einen dritten Parameter gebe, dieser als Nachricht verwendet wird, andernfalls wird die 'Standard'-Nachricht von "dev branch for $ 2" verwendet. Kann jemand erklären, wie das gemacht wird?

Madden
quelle

Antworten:

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

Die Variable msgwird auf gesetzt, $3wenn sie $3nicht leer ist, andernfalls wird sie auf den Standardwert von gesetzt dev branch for $2. $msgwird dann als Argument für verwendet -m.

cas
quelle
3

von der Bash-Manpage:

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

in deinem Fall würdest du verwenden

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

$ svcp 2 aufregende_neue_sachen
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev / aufregend_new_stuff -m "dev branch for aufregend_new_stuff"

$ svcp 2 aufregend_neues_Stuff "Geheimrezept für Weltherrschaft"
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev / aufregende_neue_stuff -m "geheimes rezept für weltherrschaft"
$

Sie können den Befehl echo entfernen, wenn Sie mit den generierten svn-Befehlen zufrieden sind

Nagu
quelle