所以问题是,当我运行我的基本脚本简单地镜像什么是在命令行上传递时,参数不会按照我期望的方式分开。
基本代码是:
write-host "`$args`[0`] = $args[0]"
write-host "`$args`[1`] = $args[1]"
write-host "`$args`[2`] = $args[2]"
如果我将脚本称为
./script apples oranges bananas
我得到了
$args[0] = apples oranges bananas[0]
$args[1] = apples oranges bananas[1]
$args[2] = apples oranges bananas[2]
如果它很重要,我在powershell 2.0中这样做
答案 0 :(得分:3)
您需要将变量包装成$(..)
,如下所示:
write-host "`$args`[0`] = $($args[0])"
write-host "`$args`[1`] = $($args[1])"
write-host "`$args`[2`] = $($args[2])"
这适用于任何非简单标量变量的表达式:
$date = get-date
write-host "day: $($date.day)"
write-host "so web page length: $($a = new-object Net.WebClient; $a.DownloadString('http://stackoverflow.com').Length)"
write-host "$(if (1 -eq (2-1)) { 'is one' } else {'is not'} )"
答案 1 :(得分:1)
这是我在个人资料中使用的辅助函数:
function Echo-Args
{
for($i=0;$i -lt $args.length;$i++)
{
"Arg $i is <$($args[$i])>"
}
}
PS > Echo-Args apples oranges bananas
Arg 0 is <apples>
Arg 1 is <oranges>
Arg 2 is <bananas>
答案 2 :(得分:0)
如果你用$ args [0]换行,例如,用双引号,就像我上面那样,它会解释$ args并停止,永远不会进入[],因此打印$ arg,或整个命令行参数数组。