Bash 在命令替换中设置变量

Bash 在命令替换中设置变量,bash,curl,command-substitution,Bash,Curl,Command Substitution,我试图将它们作为shell脚本的一部分,但反过来,我试图将它们都设置为变量。我的代码(使用)如下所示: CURL_OUTPUT="$(exec 3>&1; \ HTTP_CODE="$(curl -s -S \ -w "%{http_code}" -o >(cat >&3) \ --header 'Authorization: Bearer '"$ACCT_TOKEN" \ -X POST https://api.pushbullet

我试图将它们作为shell脚本的一部分,但反过来,我试图将它们都设置为变量。我的代码(使用)如下所示:

CURL_OUTPUT="$(exec 3>&1; \
  HTTP_CODE="$(curl -s -S \
    -w "%{http_code}" -o >(cat >&3) \
    --header 'Authorization: Bearer '"$ACCT_TOKEN" \
    -X POST https://api.pushbullet.com/v2/pushes \
    --header 'Content-Type: application/json' \
    --data-binary "$JSON")" \
)"
理论上应该将
$CURL\u OUTPUT
设置为
CURL
返回的JSON,并将
$HTTP\u code
设置为我获得的状态代码。相反,我只得到
$CURL_输出
$HTTP\u code
为空

但是,如果我不做外巢,就像这样:

exec 3>&1; \
  HTTP_CODE="$(curl -s -S \
    -w "%{http_code}" -o >(cat >&3) \
    --header 'Authorization: Bearer '"$ACCT_TOKEN" \
    -X POST https://api.pushbullet.com/v2/pushes \
    --header 'Content-Type: application/json' \
    --data-binary "$JSON")" \
指挥工作如期进行;我将JSON重定向到stdout,状态代码以
$HTTP\u code
结束


那么,有可能同时获得这两种输出吗?我可以在命令替换行中分配变量吗?

每个
$()
都是一个子shell,因此不可以,您不能在其中分配变量,然后在外部查看。如果是这样,那么我唯一的选择就是临时文件或命名管道?据我所知,是的。@RogerFilmyer:出于好奇,难道不可能将body和-w消息都输出到stdout,这样就可以捕获它们,然后将它们分开吗?