如何在powershell中连接两个环境变量名

8yparm6h  于 2023-03-08  发布在  Shell
关注(0)|答案(1)|浏览(150)

假设我有以下环境变量:

a = Poke
b = mon
Pokemon= Feraligatr

我希望能够连接ab环境变量,以获得变量名PokemonPokemon值,如$($env:ab)$($env:$($env:a)$($env:b))(此示例不起作用)

cwtwac6a

cwtwac6a1#

基于有用的评论:
您正在寻找 * 间接 *,即通过 * 另一个 *(环境)变量(存储目标变量的 * 名称 间接 * 引用环境变量的能力。

    • PowerShell惯用解决方案**:

Env:driveGet-Content cmdlet结合使用:

# The target environment variable.
$env:Pokemon='bingo!'

# The variables that, in combination, return the *name* 
# of the target environment variable.
$env:a = 'Poke'
$env:b = 'mon'

# Use Get-Content and the env: drive to retrieve
# an environment variable by an *indirectly* specified name.
# Note: 
#   * env:$env:a$env:b is treated like "env:$env:a$env:b",
#     i.e. an expandable (interpolating string).
#   * For better visual delineation of the variables, use:
#       env:${env:a}${env:b}
#   * `-ErrorAction Ignore` ignores the case when the target var.
#     doesn't exist (quietly returns $null`)
# -> 'bingo!'
Get-Content -ErrorAction Ignore env:$env:a$env:b 

# Alternative, with explicit string concatenation.
Get-Content -ErrorAction Ignore ('env:' + $env:a + $env:b)

注:

  • 要间接 * 设置 * 环境变量,请使用Set-Content cmdlet;例如:
$varName = 'FOO'
Set-Content env:$varName BAR # $env:FOO now contains 'BAR'
  • 将相同的技术应用于常规 * shell * 变量(非环境变量),需要使用variable:驱动器,或者为了更灵活,使用Get-VariableSet-Variable cmdlet-请参见this answer
  • 有关"env:$env:a$env:b"等可扩展(插值)字符串文字的详细信息,请参阅概念性about_Quoting帮助主题。
  • . NET API替代方案*:

正如Max所指出的,您还可以使用静态System.Environment.GetEnvironmentVariable. NET方法:

[Environment]::GetEnvironmentVariable("${env:a}${env:b}")

有关从PowerShell调用. NET API方法的详细信息,请参阅概念性的about_Methods帮助主题。

相关问题