我正在尝试编写一个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 \” '';