繁体   English   中英

重击双引号内的单引号

[英]Bash single quotes inside double quotes

我要执行命令:

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

仅在终端中执行时,上述命令可以正常工作。 但是,我试图在bash的包装函数内执行命令。 包装函数的工作方式是传递命令,然后基本执行该命令。 例如,对wrapperFunction的调用:

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

而wrapperFunction本身:

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

问题是'myApp adhoc'的单引号,因为通过wrapperFunction运行命令时出现错误: error: no provisioning profile matches ''myApp' 它没有选择配置文件'myApp adhoc'的全名

编辑:所以我也想将另一个字符串传递给wrapperFunction,这不是要执行的命令的一部分。 例如,我想传递一个字符串以显示命令是否失败。 在wrapperFunction内部,我可以检查$? 命令后,然后显示失败字符串(如果$?)。 -ne0。如何还通过命令传递字符串?

不要混用代码和数据。 分别传递参数(这是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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM