名称空间限定的变量名内的变量扩展
variable expansion inside namespace-qualified variable name
问题
我想执行参数变量评估。要评估的变量名称由字符串连接构成 - 来自 namespace 部分和变量中定义的 name 部分。示例:env:$var
,其中 $var
的值是,例如 "OS"
。但是,在使用表达式
时
${env:OS}
给出期望值Windows_NT
,构造
$var="OS"
${env:$var}
是一个空值表达式。
动机
我对环境变量的值不是很感兴趣(但这是我能找到的最简单的例子)。我真正想要的是通过 ${c:<filename>}
构造来引用文件的内容。我想执行几个有条件的文件内字符串替换,并且我想使用类似于此的构造:
<identify files in a foreach>
${c:<filename>} -replace 'this', 'that' > ${c:<new filename>}
为此,我需要 <filename>
作为迭代器变量的值。
问题
如果$var
的值为OS
,那么在...
处应该是什么,如果我期望下面的表达式的值为Windows_NT
?
${env:...var...}
在 env:
PSDrive 上使用 Get-ChildItem
并展开结果的 Value
:
(ls env:$var).Value
编辑: 正如@PetSerAl 在评论中建议的那样,使用 Get-Content
是一种更优雅的方法:
(cat env:$var)
问题
我想执行参数变量评估。要评估的变量名称由字符串连接构成 - 来自 namespace 部分和变量中定义的 name 部分。示例:env:$var
,其中 $var
的值是,例如 "OS"
。但是,在使用表达式
${env:OS}
给出期望值Windows_NT
,构造
$var="OS"
${env:$var}
是一个空值表达式。
动机
我对环境变量的值不是很感兴趣(但这是我能找到的最简单的例子)。我真正想要的是通过 ${c:<filename>}
构造来引用文件的内容。我想执行几个有条件的文件内字符串替换,并且我想使用类似于此的构造:
<identify files in a foreach>
${c:<filename>} -replace 'this', 'that' > ${c:<new filename>}
为此,我需要 <filename>
作为迭代器变量的值。
问题
如果$var
的值为OS
,那么在...
处应该是什么,如果我期望下面的表达式的值为Windows_NT
?
${env:...var...}
在 env:
PSDrive 上使用 Get-ChildItem
并展开结果的 Value
:
(ls env:$var).Value
编辑: 正如@PetSerAl 在评论中建议的那样,使用 Get-Content
是一种更优雅的方法:
(cat env:$var)