繁体   English   中英

如何将字符串变量传递给powershell中的命令?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM