У меня много переменных от А до Я.

$a = "bike"
$b = "car"
$c = "road"
...
$z = "street"

$array  = @()
97..122 | %{$array += "$"+[char]$_}
$array

Когда я набираю $ array, он возвращает мне:

$a
$b
$c
...
$z

Но я хочу получить значения этих переменных, а не «$ a» и т. Д.

0
expirat001 25 Июл 2014 в 20:26
Что именно вы пытаетесь сделать? Что вы пытаетесь достичь?
 – 
Benjamin Hubbard
25 Июл 2014 в 20:31
Я просто хочу, чтобы все эти переменные были в одном уникальном массиве.
 – 
expirat001
25 Июл 2014 в 20:35
Есть ли конкретная причина, по которой вы используете отдельные символы в качестве имен переменных? Означает ли это что-то в вашем контексте?
 – 
Benjamin Hubbard
25 Июл 2014 в 20:36
Ну на самом деле для меня это просто "обучение", просто для личных целей.
 – 
expirat001
25 Июл 2014 в 20:37

3 ответа

Лучший ответ

Я думаю, что он действительно хочет добавить содержимое этих переменных в свой массив, что можно сделать с помощью Get-Variable как такового:

$a = "bike"
$b = "car"
$c = "road"
$array  = @()
97..99 | %{$array += Get-Variable -name ([char]$_) -ValueOnly}
$array
2
TheMadTechnician 25 Июл 2014 в 20:46
Абсолютно! Спасибо! Я знаю, что это плохой способ, но я провожу некоторые сравнения между «плохими» и «хорошими» практиками с помощью Measure-Command и т. Д. Я бы никогда не сделал этого в производстве, очевидно, это просто для личных целей.
 – 
expirat001
25 Июл 2014 в 20:52

Попробуйте хеш:

$Hash = @{
    a = "bike"
    b = "car"
    c = "road"
...
    z = "street"
}

Вывод $Hash дает вам:

Name                           Value    
----                           -----
c                              road    
z                              street    
b                              car    
a                              bike

Это то, что вы ищете?

0
Benjamin Hubbard 25 Июл 2014 в 20:40

Вы можете использовать Get-Variable для доступа к переменным:

97..122 | %{$array += Get-Variable ([char]$_) -Value}

Но могу ли я предложить другой подход? Вместо того, чтобы создавать десятки простых переменных, почему бы не использовать хэш-таблицу? Что-то вроде:

$table = @{ 
    "a" = "bike"
    "b" = "car"
    "c" = "road"
    ...
    "z" = "street"
}

Затем вы можете получить доступ к значениям через индексацию:

$table["a"]  # > "bike"
$table["c"]  # > "car"

Если у вас много простых переменных вида $var1, $var2, $var3 или $vara, $varb, $varc, вам следует остановиться и пересмотрите свой дизайн. Обычно вы можете сделать свой код намного более элегантным, просто используя один из контейнеров PowerShell, например массив или хеш-таблицу, для первоначального хранения значений.

0
25 Июл 2014 в 21:08
Спасибо за ответ. Да, это работает с хеш-таблицами, но я хотел бы сохранить свою исходную структуру, я хочу сгенерировать переменные от А до Я, а затем добавить в массив и прочитать это.
 – 
expirat001
25 Июл 2014 в 20:40