Bash işlevinde isteğe bağlı parametreler


12

Hızlı bir şekilde yeni bir SVN dalı yapmak gibi bir fonksiyon var

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

Hangi hızlı bir şekilde aramak ve adresleri ve diğer bazı şeyleri yapıştırmak zorunda kalmadan yeni bir şube yapmak için kullanın. Ancak ileti (-m seçeneği) için, üçüncü bir parametre sağlarsanız, o zaman ileti olarak kullanılır, aksi takdirde "$ 2 için dev şube" 'varsayılan' iletisi kullanılır olmasını istiyorum. Birisi bunun nasıl yapıldığını açıklayabilir mi?

Yanıtlar:


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

değişken boş değilse if msgolarak ayarlanır , aksi takdirde varsayılan değeri olarak ayarlanır . daha sonra için argüman olarak kullanılır .$3$3dev branch for $2$msg-m


3

bash man sayfasından:

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

sizin durumunuzda,

$ function svcp () {
  def_msg = "2 $ için geliştirme dalı"
  echo svn copy "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 exciting_new_stuff
svn kopya repoadresi / şube / 2.0.x repoadresi / şube / dev / exciting_new_stuff -m "exciting_new_stuff için dev şube"

$ svcp 2 exciting_new_stuff "dünya hakimiyeti için gizli tarif"
svn kopya repoadresi / şube / 2.0.x repoadresi / şube / dev / exciting_new_stuff -m "dünya hakimiyeti için gizli reçete"
$

oluşturulan svn komutlarından memnunsanız echo komutunu kaldırabilirsiniz

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.