2010-08-02 2 views
1

Так что проблема заключается в том, что при запуске моего базового скрипта, который просто отражает то, что передается в командной строке, аргументы не разделяются так, как я ожидал бы их.аргументы командной строки в Powershell

основной код:

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

Ничего себе, поэтому um, неловко.

Если вы переносите $ args [0], например, в двойные кавычки, как я делал выше, он будет интерпретировать $ args и останавливаться, никогда не попадая в [], и поэтому печатает $ arg или весь массив аргументов командной строки.

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

Вот вспомогательную функцию я использую в моем профиле :

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> 
Смежные вопросы