在双引号内使用单引号



我想执行命令:

xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'

上面的命令在简单地在终端中执行时工作正常。但是,我正在尝试在 bash 中的包装函数中执行该命令。包装器函数的工作原理是传递一个命令,然后基本上执行该命令。例如,对包装函数的调用:

wrapperFunction "xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'"

和包装函数本身:

wrapperFunction() {
    COMMAND="$1"
    $COMMAND
}

问题是 'myApp adhoc' 中的单引号,因为当通过 wrapperFunction 运行命令时,我收到错误:error: no provisioning profile matches ''myApp' 。它不会选取预配配置文件的全名'myApp adhoc'

编辑:所以说我还想将另一个字符串传递给包装函数,该字符串不是要执行的命令的一部分。例如,我想传递一个字符串以在命令失败时显示。内部包装函数我可以检查$?命令之后,然后显示失败字符串,如果 $?-ne 0.如何使用命令传递字符串?

不要混合代码和数据。分别传递参数(这是 sudofind -exec 的作用):

wrapperFunction() {
    COMMAND=( "$@" )   # This follows your example, but could
    "${COMMAND[@]}"   # also be written as simply "$@" 
}
wrapperFunction xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'

要提供自定义错误消息,请执行以下操作:

wrapperFunction() { 
    error="$1" # get the first argument
    shift      # then remove it and move the others down
    if ! "$@"  # if command fails
    then 
      printf "%s: " "$error"  # write error message
      printf "%q " "$@"       # write command, copy-pastable
      printf "n"             # line feed
    fi
}
wrapperFunction "Failed to frub the foo" frubber --foo="bar baz"

这将生成消息Failed to frub the foo: frubber --foo=bar baz

由于引用方法并不重要,并且不会传递给命令或函数,因此输出的引用方式可能与此处不同。它们在功能上仍将相同。

相关内容

  • 没有找到相关文章

最新更新