Parámetros opcionales en la función bash

12

Tengo una función para hacer rápidamente una nueva rama SVN que se ve así

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

Lo cual uso para crear rápidamente una nueva sucursal sin tener que buscar y copiar, pegar las direcciones y otras cosas. Sin embargo, para el mensaje (opción -m), me gustaría tenerlo para que, si proporciono un tercer parámetro, se use como mensaje; de ​​lo contrario, se usará el mensaje "predeterminado" de "rama de desarrollo por $ 2". ¿Alguien puede explicar cómo se hace esto?

Enloquecer
fuente

Respuestas:

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

la variable msgse establece en $3si $3no está vacía; de lo contrario, se establece en el valor predeterminado de dev branch for $2. $msgluego se usa como argumento para -m.

cas
fuente
3

de la página de manual de 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.

en su caso, usaría

$ function svcp () {
  def_msg = "rama de desarrollo por $ 2"
  echo svn copy "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 emocionante_nuevo_nuevo
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev / emocionante_nuevo_estuff -m "dev rama de emocionante_nuevo_stuff"

$ svcp 2 vibrant_new_stuff "receta secreta para dominar el mundo"
svn copy repoaddress / branch / 2.0.x repoaddress / branch / dev / vibrant_new_stuff -m "receta secreta para la dominación mundial"
PS

puede eliminar el comando echo si está satisfecho con los comandos svn que se generan

nagu
fuente