在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} 

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

通常情况下,你可以用\来避免内部引用:

 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[@]}" 

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

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

尝试这个:

RANGE ='\“ – H \”Range:bytes = 20-30 \“\”

你可以放弃使用“和”

NO_ERROR = '' 错误= \ “0 \” '';