bash 函数中的可选参数

bash 函数中的可选参数

我有一个快速创建新 SVN 分支的功能,如下所示

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

我用它来快速创建一个新分支,而无需查找并复制粘贴地址和其他一些东西。但是,对于消息(-m 选项),我希望拥有它,以便如果我提供第三个参数,则将其用作消息,否则使用“devbranch for $2”的“默认”消息。有人可以解释这是如何完成的吗?

答案1

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

如果非空,则将变量msg设置为,否则将其设置为默认值。 然后用作的参数。$3$3dev branch for $2$msg-m

答案2

来自 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.

在你的情况下,你会使用

$ 函数 svcp() {
  def_msg="开发分支 2 美元"
  echo svn copy "repoaddress/branch/$1.0.x" "repoaddress/branch/dev/$2" -m \"${3:-$def_msg}\";
}

$ svcp 2 令人兴奋的_新_东西
svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m“exciting_new_stuff 的开发分支”

$ svcp 2 eager_new_stuff "统治世界的秘密配方"
svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m “统治世界的秘密配方”
$

如果您对生成的 svn 命令感到满意,可以删除 echo 命令

相关内容