Странное расширение строки с powershell - PullRequest
13 голосов
/ 20 января 2010

Я использую функцию расширения строк для создания имен файлов, и я не совсем понимаю, что происходит.

рассмотрим:


$baseName = "base"
[int]$count = 1
$ext = ".ext"

$fileName = "$baseName$count$Ext"
#filename evaluates to "base1.ext" -- expected

#now the weird part -- watch for the underscore:
$fileName = "$baseName_$count$Ext"
#filename evaluates to "1.ext" -- the basename got dropped, what gives?

Просто добавление подчеркивания кажется полностьюскинуть паузу пауэршеллВозможно, это какое-то странное синтаксическое правило, но я бы хотел понять это правило.Кто-нибудь может мне помочь?

Ответы [ 3 ]

19 голосов
/ 20 января 2010

На самом деле то, что вы видите здесь, - это проблема выяснения, когда одна переменная останавливается, а следующая запускается. Он пытается найти $ baseName _.

Исправление заключается в том, чтобы заключить переменные в фигурные скобки:

$baseName = "base" 
[int]$count = 1 
$ext = ".ext" 

$fileName = "$baseName$count$Ext" 
#filename evaluates to "base1.ext" -- expected 

#now the wierd part -- watch for the underscore: 
$fileName = "$baseName_$count$Ext" 
#filename evaluates to "1.ext" -- the basename got dropped, what gives?

$fileName = "${baseName}_${count}${Ext}" 
# now it works
$fileName

Надеюсь, это поможет

7 голосов
/ 20 января 2010

вы также можете использовать «$ baseName`_ $ count $ Ext»

4 голосов
/ 20 января 2010

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

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