Bash 捕获包含引号和环境变量的命令的输出
我知道我可以像这样捕获bash命令的输出:Bash 捕获包含引号和环境变量的命令的输出,bash,Bash,我知道我可以像这样捕获bash命令的输出: OUTPUT="$(ls -1)" echo "${OUTPUT}" 但我的命令本身包含很多引号: OUTPUT="$(curl -v -u ${USER}:${PASSWD} -X POST -H "Content-Type: application/json" -d '{ "xxx": true, "xxx2": "date", ... }' https://${ENV}/${ROOT}/api/try)" 但这将返回一个空字符串: echo
OUTPUT="$(ls -1)"
echo "${OUTPUT}"
但我的命令本身包含很多引号:
OUTPUT="$(curl -v -u ${USER}:${PASSWD} -X POST -H "Content-Type: application/json" -d '{
"xxx": true,
"xxx2": "date",
...
}' https://${ENV}/${ROOT}/api/try)"
但这将返回一个空字符串:
echo $OUTPUT
如何捕获此命令的输出?有两种方法,要么用\“”转义字符串中的引号,要么使用单引号,即
% BLA="bla \"a\""
% echo $BLA
bla "a"
% BLA='bla "a"'
% echo $BLA
bla "a"
Bash可以很好地处理嵌套的引号和括号,但事实并非如此
OUTPUT="$(curl -v -u ${USER}:${PASSWD} -X POST -H "Content-Type: application/json" -d '{
"xxx": true,
"xxx2": "date",
...
}' https://${ENV}/${ROOT}/api/try)"
有可能是
curl
本身没有响应任何内容。只需使用复杂的命令创建一个函数:
cmdfn() {
curl -v -u ${USER}:${PASSWD} -X POST -H "Content-Type: application/json" -d '{
"xxx": true,
"xxx2": "date",
...
}' https://${ENV}/${ROOT}/api/try
}
然后在命令替换中调用它,如下所示:
output="$(cmdfn)"
返回空字符串与引号无关。即使在命令行中运行而不捕获输出,您的
curl
查询也可能返回空字符串