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";
}

null이 아닌 경우 변수는 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 Exciting_new_stuff
svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m "exciting_new_stuff의 개발 브랜치"

$ svcp 2 열망하는_new_stuff "세계 지배를 위한 비법"
svn copy repoaddress/branch/2.0.x repoaddress/branch/dev/exciting_new_stuff -m "세계 지배를 위한 비밀 레시피"
$

생성된 svn 명령에 만족하면 echo 명령을 제거할 수 있습니다.

관련 정보