Я не могу понять, почему следующий код не:
# test.ps1
"`$args: ($args)"
"`$args count: $($args.length)"
# this fails
0..$($args.length - 1) | %{ $args[$_] = ($args[$_] -replace '`n',"`n") }
# this works
$i = 0
foreach ($el in $args) { $args[$i] = $args[$i] -replace '`n',"`n"; $i++ }
"$args"
Я звоню это так:
rem from cmd.exe
powershell.exe -noprofile -file test.ps1 "a`nb" "c"
Я, наконец, понял. Являясь автоматической переменной, '$ args' является и исключением, потому что каждая новая область получает свои собственные аргументы, переданные из родительской области, по умолчанию« $ null ». Вот почему вложенная область не будет искать переменную '$ args', а затем увеличивать стек области. Альтернативно вашему предложенному решению, '$ script: args' тоже работает. Привет, Кит. – guillermooo