Почему powershell автоматически складывает мои строки и передает их в качестве первого аргумента? - PullRequest
3 голосов
/ 04 августа 2011

У меня есть следующий код:

function printVars($var1, $var2)
{
  Write-Host "var1: $var1"
  Write-Host "var2: $var2"
}

printVars ('asdf', 'qwer')

Это дает такой результат:

var1: asdf qwer
var2:

Я ожидаю этого:

var1: asdf
var2: qwer

Почему он это делает и как заставить его делать то, что я хочу?

Ответы [ 3 ]

4 голосов
/ 04 августа 2011

Поскольку ('asdf','qwer') рассматривается как массив, поэтому $var1 получает массив, а $var2 пусто.

До printVars 'asdf' 'qwer'

Даже если у вас нет паратезов и есть только запятая, это массив.

Попробуйте это:

$b ="one","two"
$b.GetType()
3 голосов
/ 05 августа 2011

Правильный ответ уже предоставлен, но для тех, кто ищет дополнительную информацию, я сорвал это с моей краткой справочной таблицы PowerShell. Предполагается, что подпись функции f f($a, $b, $c):

syntax pitfalls of a function call

Таким образом, можно вызывать функцию с разделенными пробелами позиционными параметрами или независимыми от порядка именованными параметрами. Другие подводные камни показывают, что вам нужно знать запятые, скобки и пробелы.

Для дальнейшего чтения см. Мою недавнюю статью Вниз по кроличьей норе - исследование по конвейерам, функциям и параметрам PowerShell , только что опубликованное на Simple-Talk.com. Статья содержит ссылку на краткий справочник / настенную диаграмму.

0 голосов
/ 04 августа 2011

Теперь я вижу. Я неправильно вызываю функцию.

Должно быть так:

printVars 'asdf' 'qwer'

Цитаты тоже можно удалить.

Хотя, похоже, что такие языки скобок, как Perl и C, вызов функции подобен вызову другой команды с использованием большинства оболочек.

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

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