![bash 函数中的可选参数](https://linux22.com/image/86915/bash%20%E5%87%BD%E6%95%B0%E4%B8%AD%E7%9A%84%E5%8F%AF%E9%80%89%E5%8F%82%E6%95%B0.png)
我有一个快速创建新 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
$3
dev 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 命令