You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PowerShell命令输出赋值给变量,实现Mac端curl导出TOKEN的同等效果

Windows 命令行赋值命令输出到变量的常见问题说明

你之前在mac上使用的是类Unix shell的语法,Windows原生的命令行环境语法规则和类Unix shell完全不兼容,使用>尝试赋值本身就是语法错误,>在Windows所有常用shell中都是将输出重定向写入文件的作用,和变量赋值无关。

接下来分不同环境给出对应正确写法:

1. 适用于Windows cmd(命令提示符)的写法

:: 如果是写.bat/.cmd批处理文件使用以下语法
for /f "delims=" %%i in ('curl.exe --header "Metadata-Flavor: Google" --get --data-urlencode "audience=http://vault/%ROLE%" --data-urlencode "format=full" "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity"') do set TOKEN=%%i

注意事项:

  • 如果是直接在cmd窗口手动执行命令,把%%i替换为%i
  • 变量引用格式为%变量名%,和类Unix的${变量名}不同
  • 必须调用curl.exe而非curl,避免和部分Windows版本中curl的别名冲突

2. 适用于Windows PowerShell的写法

$TOKEN = curl.exe --header "Metadata-Flavor: Google" --get --data-urlencode "audience=http://vault/$env:ROLE" --data-urlencode "format=full" "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity"

注意事项:

  • PowerShell默认将curl作为Invoke-WebRequest命令的别名,该命令参数和原生curl完全不兼容,必须加.exe后缀调用原生curl程序
  • 环境变量引用格式为$env:变量名,例如示例中的$env:ROLE

3. 适用于WSL/Git Bash等类Unix模拟环境的写法

这类环境完全兼容类Unix shell语法,你原本在mac上使用的命令可以直接运行:

export TOKEN="$(curl --header "Metadata-Flavor: Google" --get --data-urlencode "audience=http://vault/${ROLE}" --data-urlencode "format=full" "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity")"

你遗漏的核心操作要点

  • 没有确认当前使用的shell环境,错误混用不同体系的shell语法
  • 没有处理Windows平台curl的别名冲突问题,导致命令执行结果不符合预期
  • 错误使用>符号做变量赋值,该符号仅用于文件重定向,无变量赋值作用
  • 没有按照对应shell的要求调整变量引用格式

内容的提问来源于stack exchange,提问作者Andrew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:09:02