如何在Linux的PowerShell REPL中打印bash导出的环境变量?
报错原因
你执行Get-Variable foo找不到对应值,核心是混淆了PowerShell的两类变量存储逻辑:
Get-Variable默认搜索的是PowerShell自身作用域内的普通变量、内置自动变量,这类变量存放在专用的Variable:虚拟驱动器下- 你在bash里通过
export导出的foo属于进程环境变量,pwsh启动时会把这类从父进程继承的环境变量统一挂载在Env:虚拟驱动器下,完全不在Get-Variable的默认搜索范围内 - 你之前执行
Get-Variable HOME -valueOnly能返回结果,是因为HOME是PowerShell自带的内置自动变量,启动时就被映射到PowerShell的常规变量作用域中,和环境变量的存储通道是相互独立的,才会被Get-Variable检索到
打印对应环境变量的正确方式
在你当前启动的pwsh会话里,用以下任意一种方法都可以直接输出foo的值:
- 最简洁的常用写法:直接输入
$env:foo,控制台会直接显示对应的值bar - 通过驱动器查询:输入
Get-Item Env:foo | Select-Object -ExpandProperty Value,可以只输出变量的实际值;如果不加重定向,会返回变量的完整名称和属性信息 - 通过.NET原生方法查询:输入
[Environment]::GetEnvironmentVariable('foo'),同样可以获取到环境变量的值
注意事项
只有在bash里通过export命令导出的变量,才会被作为环境变量传递给后续启动的pwsh子进程;如果只是在bash里临时定义了变量、没执行export,哪怕在bash里用echo能打印出值,pwsh作为子进程也是完全无法读取到这个变量的。
内容的提问来源于stack exchange,提问作者Nicholas Saunders
相关产品推荐
相关产品推荐

