gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:52:43 25 4
gpt4 key购买 nike

我打算在脚本中使用powershell变量将字符串值传递给命令,然后该命令将使用字符串中定义的参数执行。我已经看了几个小时了,但我没有发现我做错了什么。我已尽力简化了。为了给大家带来新鲜的眼睛,我附上一张图片,显示:

一种。我正在使用的脚本。这是三行。

$Parms = "-it amazonlinux2 /bin/sh"
Write-Output "& docker run $Parms"
& docker run $Parms

b。我执行脚本的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#

Image of the above

发生了什么魔术,因此写入输出不会被解释为命令?我努力了:

一种。 docker run $Parms(不带&)

b。 & docker run "$Parms"(用引号引起来)

C。 $Parms = "amazonlinux2 /bin/sh"& docker run -it $Parms(不同的错误)

d。 $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如何正确,但call命令却很糟糕。没那么难...

最佳答案

call 操作符(&)不parse strings,因此“使用 call 操作符时,您不能在字符串中使用命令参数”。但是,您可以传递一个数组,以便执行以下操作:

$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"

关于powershell - 如何在Powershell中将字符串变量传递给命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59622147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com