我知道我可以像这样捕获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
如何捕获此命令的输出?
答案 0 :(得分:1)
只需使用复杂命令创建一个函数:
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)"
答案 1 :(得分:0)
有两种方法,要么使用\"来转义字符串中的引号,要么使用单引号,即
% BLA="bla \"a\""
% echo $BLA
bla "a"
% BLA='bla "a"'
% echo $BLA
bla "a"
答案 2 :(得分:0)
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
本身可能没有回应任何东西。