je ne peux pas comprendre pourquoi le code suivant échoue:
# 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"
J'appelle comme ceci:
rem from cmd.exe
powershell.exe -noprofile -file test.ps1 "a`nb" "c"
J'ai finalement compris. En tant que variable automatique, '$ args' est et exception parce que chaque nouvelle portée reçoit ses propres arguments passés de la portée parent, par défaut' $ null'. C'est pourquoi une étendue imbriquée ne recherchera pas une variable '$ args' plus haut dans la pile de la portée. Anternativement à votre solution suggérée, '$ script: args' fonctionne aussi. À la vôtre, Keith. – guillermooo