我正在尝试编写一个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}
我知道我不能使用嵌套引号。但是我怎么能做到这一点?
答案 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 ;;