2010-08-25 6 views
2

Qu'est-ce qui se passe exac- tement dans l'exemple 1? Comment est-ce analysé?Powershell Utilisation de Backtick pour les nouvelles lignes - étrangeté

# doesnt split on , 
[String]::Join(",",("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa," + ` 
"aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa".Split(',') ` 
| foreach { ('"' + $_ + '"') })) 





# adding () does work 
[String]::Join(",",(("aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa," + ` 
"aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa,aaaaa").Split(',') ` 
| foreach { ('"' + $_ + '"') })) 

Répondre

2

Dans votre premier exemple, vous pouvez supprimer le backtick, car Powershell sait que la chaîne continuera (il y a un signe +).

Quel snob ne

  1. prend chaîne "AAAA, Heu ..." (1) de la première
  2. évalue l'expression avec split - il retourne un tableau de chaînes (de "aaaa,...aaaa".Split(','))
  3. convertis le tableau de chaînes à la chaîne, qui retourne à nouveau string "AAAA, ... AAAA"
  4. ajoute les résultats de 1. et 3.

Remarque: lorsque le composant CHU convertit un tableau en chaîne, il utilise la variable $ofs. Vous le verrez mieux en action lorsque vous essayerez ce code:

$ofs = "|" 
[String]::Join(",", ("aaaaa,aaaaa" + "bbbb,bbbb,bbbb".Split(',') | foreach { ('"' + $_ + '"') })) 
1

Votre premier exemple a uniquement la méthode Split appliquée à la deuxième chaîne de a. Les parenthèses sont nécessaires pour l'ordre des opérations. La méthode Split est effectuée avant la concaténation dans votre premier exemple.

Questions connexes