捕获包含引号和env变量的命令输出

时间:2018-01-25 10:38:56

标签: 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

如何捕获此命令的输出?

3 个答案:

答案 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本身可能没有回应任何东西。