Необязательные параметры в функции bash

12

У меня есть функция для быстрого создания новой ветки SVN, которая выглядит так

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

Который я использую, чтобы быстро создать новую ветку без необходимости искать и копировать, вставлять адреса и некоторые другие вещи. Однако для сообщения (опция -m) мне бы хотелось, чтобы, если я предоставлю третий параметр, он будет использоваться в качестве сообщения, в противном случае используется сообщение по умолчанию «dev branch for $ 2». Может кто-нибудь объяснить, как это делается?

бесить
источник

Ответы:

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

переменная msgимеет значение, $3если не $3является пустым, в противном случае это значение по умолчанию dev branch for $2. $msgзатем используется в качестве аргумента для -m.

саз
источник
3

со страницы руководства 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.

в вашем случае вы бы использовали

$ function svcp () {
  def_msg = "ветка разработчика за 2 доллара"
  echo svn copy "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 exciting_new_stuff
репо-адрес svn-копии / branch / 2.0.x репо-адрес / branch / dev / exciting_new_stuff -m "ветка dev для возбуждающих_ новых_стук"

$ svcp 2 exciting_new_stuff "секретный рецепт мирового господства"
repoaddress svn copy / ответвление / 2.0.x ответный адрес / ответвление / dev / возбуждающий_новый_mff -m "секретный рецепт мирового господства"
$

вы можете удалить команду echo, если вы удовлетворены сгенерированными командами svn

NAGU
источник