Parâmetros opcionais na função bash

12

Eu tenho uma função para criar rapidamente um novo ramo SVN que parece tão

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

Que eu uso para criar rapidamente uma nova ramificação sem precisar procurar e copiar e colar os endereços e outras coisas. No entanto, para a mensagem (opção -m), eu gostaria de tê-lo para que, se eu fornecer um terceiro parâmetro, ele seja usado como mensagem, caso contrário, a mensagem 'padrão' de "ramificação de dev para $ 2" será usada. Alguém pode explicar como isso é feito?

Madden
fonte

Respostas:

20
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é definida como $3se $3não estiver vazia, caso contrário, é definida como o valor padrão de dev branch for $2. $msgé então usado como argumento para -m.

cas
fonte
3

na página do manual do 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

$ função svcp () {
  def_msg = "ramificação de desenvolvimento por US $ 2"
  echo svn copy "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 interesting_new_stuff
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev / emocionante_new_stuff -m "ram ramo dev para emocionante_novo_stuff"

$ svcp 2 interesting_new_stuff "receita secreta para dominar o mundo"
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev / emocionante_new_stuff -m "receita secreta para dominar o mundo"
$

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

nagu
fonte