如何将引用的字符串作为参数传递给bash中的函数?

时间:2012-08-24 00:22:33

标签: linux bash shell unix

我有一个简单的bash函数,其目标是运行以字符串形式传入的命令,检查$?中的返回码,如果它返回非零值,则打印第二个参数中指定的错误并退出。

这是功能:

function checkcommand()
{
    $1
    if [ "$?" -ne "0" ]; then
        echo "$2"
        exit 1
    fi
}

功能很棒。以下是一些有用的示例:

checkcommand "git clone /home/git/framework.git $gitreponame" "git clone failed!
"

当我想使用我的函数来验证提交是否成功时,问题出现了:

checkcommand "git commit -m\"remove migrations from release-$todaysrelease-pr
ep\"" "Commit for migrations removal from release-$todaysrelease-prep failed!" 

我尝试过(如图所示)baclslash引用,单引号,单引号和双引号的各种组合等。

感谢您提供任何线索!

2 个答案:

答案 0 :(得分:1)

尝试

function checkcommand()
{
    eval $1
    if [ "$?" -ne "0" ]; then
        echo "$2"
        exit 1
    fi
}

在您的命令中\之前使用",就像在示例中一样。

答案 1 :(得分:1)

将单词列表保留为单词列表;不要把它们引用成一个单词只是为了以后扩展它:eval是邪恶的。

典型的die函数是一个更简单,更易读的习语:

die() {
  echo "$*" >&2
  exit 1
}

git commit -m"remove migrations from release-$todaysrelease-prep" ||
  die "Commit for migrations removal from release-$todaysrelease-prep failed!"