在bash中使用多层引号

时间:2011-12-29 21:11:18

标签: linux bash

我正在尝试编写一个bash脚本,而且我遇到了一个引用问题。

我追求的最终结果是我的脚本可以调用:

lwp-request -U -e -H "Range: bytes=20-30"

我的脚本文件如下:

CLIENT=lwp-request
REQ_HDRS=-U
RSP_HDRS=-e
RANGE="-H "Range: bytes=20-30""   # Obviously can't do nested quotes here
${CLIENT} ${REQ_HDRS} ${RSP_HDRS} ${RANGE}

我知道我不能使用嵌套引号。但是我怎么能做到这一点?

3 个答案:

答案 0 :(得分:13)

通常,您可以使用\转义内部引号:

RANGE="-H \"Range: bytes=20-30\""

但是这在运行命令时不起作用 - 除非你把eval放在整个事情之前:

RANGE="-H \"Range: bytes=20-30\""
eval $CLIENT $REQ_HDRS $RSP_HDRS $RANGE

但是,由于你使用bash而不是 sh ,你可以在数组中放置单独的参数:

RANGE=(-H "Range: bytes=20-30")
$CLIENT $REQ_HDRS $RSP_HDRS "${RANGE[@]}"

这可以扩展到:

ARGS=(
    -U                             # Request headers
    -e                             # Response headers
    -H "Range: bytes=20-30"        # Range
)
$CLIENT "${ARGS[@]}"

答案 1 :(得分:1)

您可以使用''和“”都可用于字符串的事实 所以你可以做这样的事情:

x='Say "hi"'
y="What's up?"

答案 2 :(得分:1)

试试这个:

  

RANGE =' \" -H \"范围:字节= 20-30 \" \"

你可以使用''和\"

  

NO_ERROR =''错误= \" 0 \"'&#39 ;;