аргументы командной строки в Powershell - PullRequest
1 голос
/ 02 августа 2010

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

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

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

Ответы [ 3 ]

3 голосов
/ 02 августа 2010

Вам нужно заключить переменную в $(..) следующим образом:

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 голос
/ 02 августа 2010

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

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>
0 голосов
/ 02 августа 2010

Ух ты, так смущает.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...