我试图在PowerShell中将环境变量设置为空字符串。请注意,我不想取消环境变量;我希望它设置但是空的。但是,如果只是将其设置为空字符串,PowerShell将完全删除环境变量。我尝试过以下方法:
$ENV:VAR=''
$ENV:VAR=[String]::Empty
$ENV:VAR=[NullString]::Value
$ENV:VAR=$null
New-Item -Path ENV:VAR -Value ''
New-Item -Path ENV:VAR -Value [string::Empty]
每个(最后一个除外)导致变量不出现在Get-ChildItem -path ENV:
的输出中。最后一个将环境变量设置为文字字符串[string::Empty]
,这绝对不是我想要的。
为了完整性:
$ PSVersionTable.PSVersion
Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
我可以看到它的可能有一个空的环境变量,因为我有几个:
ConEmuANSI ON
ConEmuAnsiLog
ConEmuArgs
ConEmuArgs2
ConEmuBackHWND 0x00F40BFC
仅供参考,我实际上是尝试将DOCKER_TLS_VERIFY
环境变量设置为空字符串,因为docker-compose将该变量的缺失视为表示我想要进行TLS验证,并且我使用的Docker主机已禁用TLS。我暂时放弃并换掉了贝壳。
答案 0 :(得分:0)
您应该在其他网站上查看以下帖子。根据它的说法,Docker忽略值DOCKER_TLS_VERIFY
并将其存在本身用作一种开/关切换。如果您在脚本中已将其打开,则会将其删除,如果您将其删除,则会禁用DLS。
答案 1 :(得分:0)
我发现了同样的问题。似乎有一种特殊的环境变量行为,可以通过将它们设置为空白字符串来删除它们。
这可以将局部变量设置为空白字符串:
$p = [string]$null
$p.getType()
但是,如果您使用环境变量尝试相同的操作,则将无效:
$Env:p = [string]$null
$Env:p.getType()
根据此网站(https://ss64.com/ps/syntax-env.html),将环境变量设置为空白字符串是删除它的规定方法。
我认为这可能是从旧的DOS环境变量处理方法继承的行为。