Powershell Variable replacement not working from command line
我有以下要从PowerShell运行的命令:
1 | docker run -v C:\\src\\docker_certs:/root/.dotnet/https -it MyContainer:MyTag /bin/bash |
当我运行它时,它运行完美。 (它使用目标文件夹中的源文件夹安装卷。)
但是当我运行此命令时:
1 | docker run -v $env:DOCKER_CERTS_PATH:/root/.dotnet/https -it MyContainer:MyTag /bin/bash |
该卷未安装。
我运行它来检查值:
1 | echo $env:DOCKER_CERTS_PATH |
它返回:
C:\\src\\docker_certs
据我所知,它应该在第二个命令中用C:\\\\ src \\\\ docker_certs替换
如何在运行命令时获取对要替换的环境变量的PowerShell引用?
将环境变量引用包含在
中
1 | docker run -v ${env:DOCKER_CERTS_PATH}:/root/.dotnet/https ... |
或者,
1 | docker run -v $env:DOCKER_CERTS_PATH`:/root/.dotnet/https ... |
关于您尝试过的事情:
docker run -v $env:DOCKER_CERTS_PATH:/root/.dotnet/https ...
如果您不使用
作为使用
请注意,在这种情况下,您的命令参数将被隐式处理,就像将其括在
有关如何将无引号的令牌解析为命令参数的详细讨论,请参见此答案。
在当前情况下,
由于不存在这样的环境变量(大概),因此
您可以验证
1 2 | PS> $env:DOCKER_CERTS_PATH: = 'hi'; $env:DOCKER_CERTS_PATH: hi |
相反,不允许使用常规(shell)变量包含
1 2 | PS> $DOCKER_CERTS_PATH: = 'hi' # BREAKS, even with {...} Variable reference is not valid. ':' was not followed by a valid variable name character. Consider using ${} to delimit the name. |
变量标识符中的第一个
此表示法称为名称空间变量表示法,如本答案所述。