Странное расширение строки с помощью powershell

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

рассмотреть следующие вопросы:


$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?

Просто добавление подчеркивания, похоже, полностью отбрасывает паз Powershell! Это, вероятно, какое-то странное правило синтаксиса, но я хотел бы понять правило. Может ли кто-нибудь помочь мне?

Ответ 1

Фактически то, что вы видите здесь, является проблемой при определении того, когда одна переменная останавливается и начинается следующая. Он пытается найти $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

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

Ответ 2

вы также можете использовать "$ BaseName`_ $количества $Ext"

Ответ 3

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