Необов’язкові параметри в функції bash


12

У мене є функція швидкого створення нової гілки SVN, яка виглядає так

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

Який я використовую для швидкого створення нової гілки без необхідності шукати та копіювати вставки та інші речі. Однак для повідомлення (опція -m) я хотів би мати його так, що якщо я надам третій параметр, то він використовується як повідомлення, інакше використовується повідомлення за замовчуванням "відділення dev за $ 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 man":

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

у вашому випадку ви б використали

$ функція svcp () {
  def_msg = "відділення dev за $ 2"
  echo svn копія "repoaddress / branch / $ 1.0.x" "repoaddress / branch / dev / $ 2" -m \ "$ {3: - $ def_msg} \";
}

$ svcp 2 захоплюючий_новий_продукт
svn скопіювати repoaddress / відділення / 2.0.x repoaddress / відділення / dev / хвилююче_new_stuff -m "відділення dev для захоплюючого_new_stuff"

$ svcp 2 хвилюючий_новий_ступ "таємний рецепт світового панування"
svn copy repoaddress / branch / 2.0.x repoaddress / відділення / dev / хвилююче_new_stuff -m "секретний рецепт домінування у світі"
$

ви можете видалити команду echo, якщо ви задоволені створеними командами svn

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.