Parameter opsional dalam fungsi bash

12

Saya memiliki fungsi untuk dengan cepat membuat cabang SVN baru yang terlihat seperti itu

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

Yang saya gunakan untuk dengan cepat membuat cabang baru tanpa harus mencari dan menyalin paste alamat dan beberapa hal lainnya. Namun untuk pesan (-m opsi), saya ingin memilikinya sehingga jika saya memberikan parameter ketiga maka yang digunakan sebagai pesan, jika tidak pesan 'default' dari "dev branch for $ 2" digunakan. Adakah yang bisa menjelaskan bagaimana ini dilakukan?

Menjengkelkan
sumber

Jawaban:

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

variabel msgdiatur ke $3jika $3tidak kosong, jika tidak diatur ke nilai default dev branch for $2. $msgkemudian digunakan sebagai argumen untuk -m.

cas
sumber
3

dari halaman bash man:

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

dalam kasus Anda, Anda akan menggunakannya

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

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

$ svcp 2 exciting_new_stuff "resep rahasia untuk dominasi dunia"
svn salin repoaddress / branch / 2.0.x repoaddress / branch / dev / exciting_new_stuff -m "resep rahasia untuk dominasi dunia"
$

Anda dapat menghapus perintah gema jika Anda puas dengan perintah svn yang dihasilkan

nagu
sumber