web-dev-qa-db-ja.com

bash関数のオプションパラメータ

こんな感じのSVNブランチを素早く作る機能があります

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

アドレスなどを調べてコピーして貼り付ける必要なしに、新しいブランチをすばやく作成するために使用します。ただし、メッセージ(-mオプション)の場合は、3番目のパラメーターを指定するとメッセージとして使用され、それ以外の場合は「$ 2の開発ブランチ」の「デフォルト」メッセージが使用されるようにしたいと思います。これがどのように行われるかを誰かが説明できますか?

12
Madden
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の引数として使用されます。

20
cas

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.

あなたの場合、あなたは使うでしょう

 $ function svcp(){
 def_msg = "dev branch for $ 2" 
 echo svn copy "repoaddress/branch/$ 1.0.x" "repoaddress/branch/dev/$ 2" -m\"$ {3:-$ def_msg} \"; 
} 
 
 $ svcp 2 excited_new_stuff 
 svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m "刺激的な新機能の開発ブランチ" 
 
 $ svcp 2刺激_世界の支配のための秘密のレシピ
/branch/dev/exciting_new_stuff -m "世界支配の秘密のレシピ" 
 $ 

生成されたsvnコマンドに満足したら、echoコマンドを削除できます

3
nagu