Parâmetros opcionais na função bash

4

Eu tenho uma função para criar rapidamente uma nova ramificação do SVN que seja assim

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

O que eu uso para criar rapidamente um novo branch sem ter que procurar e copiar e colar os endereços e algumas outras coisas. No entanto, para a mensagem (opção -m), eu gostaria de tê-lo para que se eu fornecer um terceiro parâmetro, em seguida, que é usado como a mensagem, caso contrário, a mensagem 'default' de "dev branch for $ 2" é usada. Alguém pode explicar como isso é feito?

    
por Madden 04.04.2016 / 13:03

2 respostas

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

a variável msg está definida como $3 se $3 não estiver vazia, caso contrário, ela será definida para o valor padrão de dev branch for $2 . $msg é então usado como argumento para -m .

    
por 04.04.2016 / 13:13
0

da página man 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.

no seu caso, você usaria

$ 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 exciting_new_stuff
svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m "dev branch for exciting_new_stuff"

$ svcp 2 exciting_new_stuff "secret recipe for world domination"
svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m "secret recipe for world domination"
$

você pode remover o comando echo se estiver satisfeito com os comandos svn que são gerados

    
por 04.04.2016 / 13:45