[英]How to pass a string variable to a command in powershell?
我打算在脚本中使用 powershell 变量将字符串值传递给命令,然后使用字符串中定义的参数执行命令。 我已经看了几个小时了,我不知道我做错了什么。 我已经尽可能地简化了。 希望新鲜的眼睛,我附上了一张图片,显示:
一种。 我正在使用的脚本。 它有三行长。
$Parms = "-it amazonlinux2 /bin/sh"
Write-Output "& docker run $Parms"
& docker run $Parms
湾我在其中执行脚本的 PS 命令行。
PS C:\dev\gamelift\serversdk\build> ./test
C。 脚本执行的结果
& docker run -it amazonlinux2 /bin/sh
unknown shorthand flag: ' ' in - amazonlinux2 /bin/sh
See 'docker run --help'.
d. 在提示符下立即执行相同的命令。
PS C:\dev\gamelift\serversdk\build> docker run -it amazonlinux2 /bin/sh
e. 提示命令的结果,这是正确的
sh-4.2#
发生了什么魔法使得写入输出不被解释为命令? 我试过了:
一种。 docker run $Parms
(没有 &)
湾 & docker run "$Parms"
(在引号中)
C。 $Parms = "amazonlinux2 /bin/sh"
和& docker run -it $Parms
$Parms = "amazonlinux2 /bin/sh"
& docker run -it $Parms
(不同的错误)
d. $Parms = "amazonlinux2"
和& docker run -it $Parms /bin/sh
$Parms = "amazonlinux2"
& docker run -it $Parms /bin/sh
(有效)
e. 转义连字符(不同的错误)
F。 $Parms = "-it amazonlinux2 /bin/sh"
和每个& docker run $($Parms)
, & docker run ${$Parms}
和& docker run ${Parms}
我感觉有点傻。 我看不出Write-Output
是如何正确的,但调用命令是 bork。 不可能那么难...
调用运算符 (&) 不解析字符串,因此“使用调用运算符时不能在字符串中使用命令参数”。 但是,您可以传递一个数组,以便以下内容起作用:
$Parms = "-it amazonlinux2 /bin/sh"
Write-Output "& docker run $Parms"
$myargs = -split $Parms
& docker run $myargs
或者使用 Invoke-Expression (别名iex
)也可以解决这个问题,例如:
$Parms = "-it amazonlinux2/bin/sh"
Write-Output "& docker run $Parms"
iex "docker run $Parms"
这是一个常见问题,虽然没有很好的记录。 调用运算符参数作为数组工作:
$Parms = '-it','amazonlinux2','/bin/sh'
Write-Output "& docker run $Parms"
& docker run $Parms
我会直接运行docker。
docker -it amazonlinux2 /bin/sh
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.