Opcjonalne parametry w funkcji bash

12

Mam funkcję szybkiego tworzenia nowej gałęzi SVN, która tak wygląda

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

Którego używam, aby szybko utworzyć nowy oddział bez konieczności wyszukiwania i kopiowania, wklej adresy i inne rzeczy. Jednak w przypadku komunikatu (opcja -m) chciałbym go mieć, aby podać trzeci parametr, który zostanie użyty jako komunikat, w przeciwnym razie użyty zostanie komunikat „domyślny” z „gałęzi programisty za 2 USD”. Czy ktoś może wyjaśnić, jak to się robi?

Szaleć
źródło

Odpowiedzi:

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

zmienna msgjest ustawiona na $3if, jeśli $3nie jest pusta, w przeciwnym razie jest ustawiona na wartość domyślną dev branch for $2. $msgjest następnie używany jako argument dla -m.

cas
źródło
3

ze strony podręcznika użytkownika 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.

w twoim przypadku użyłbyś

$ function svcp () {
  def_msg = "gałąź dewelopera za 2 $"
  echo svn copy "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 ekscytująca_na_początek
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev /lare_new_stuff -m "gałąź dewelopera dla ekscytującego_nowego_obrazu”

$ svcp 2 ekscytujący_nowa_firma „tajny przepis na dominację nad światem”
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev /lare_new_stuff -m „tajny przepis na dominację nad światem”
$

możesz usunąć polecenie echo, jeśli jesteś zadowolony z wygenerowanych poleceń svn

nagu
źródło