#powershell
#powershell
Вопрос:
Привет всем, я новичок в power shell и пытаюсь разобраться в каждом цикле, но я не понимаю, что означает $ в приведенном ниже сценарии и почему они используются вместе
$names = "jones","mike","Ash"
foreach ($name in $names)
{
"$name = " $name.length
}
Комментарии:
1. Я только что скопировал этот скрипт из Google, но пытаюсь разобраться в цикле for. Что такое $name для каждого цикла, я в замешательстве, потому что переменная, которую мы объявили, равна $names
Ответ №1:
Прежде всего, это PowerShell. Здесь нет пробела и соблюдайте заглавные буквы.
Во-вторых, RTFM. В Technet есть много документации. Воспользуйтесь этим. Есть встроенная справка. Прочитайте Help about_*
темы.
Возвращаясь к вашему вопросу, foreach
цикл повторяется по всей коллекции. В вашем примере $names
представляет собой массив строк. Массив — это коллекция.
В вашем примере, когда foreach
цикл выполняет итерацию по коллекции, он копирует каждый элемент в коллекции в другую вызываемую переменную $name
.
foreach ($name in $names) {}
Внутри foreach
цикла вы можете использовать $name
переменную для извлечения значения, хранящегося в элементе. Итак, следующий код выведет значения в коллекции.
foreach ($name in $names) {
$name
}
$name
является строкой. Итак, $name.Length
дает нам длину этой строки.
является арифметическим оператором. Его можно использовать для объединения строк. В этом случае $name $name.length
к значению будет добавлено значение length.
Вот измененный пример с выводом:
$names = "jones","mike","Ash"
foreach ($name in $names)
{
$name $name.Length
}
jones5
mike4
Ash3
Наконец, перейдем к вашему примеру и результату:
$names = "jones","mike","Ash"
foreach ($name in $names)
{
"$name = " $name.Length
}
jones = 5
mike = 4
Ash = 3
Я надеюсь, что это дает вам некоторое объяснение того, что делает пример.
Ответ №2:
Давайте рассмотрим это шаг за шагом:
$names = "jones","mike","Ash"
Это объявляет массив с тремя строковыми элементами и сохраняет его в переменной $names.
foreach ($name in $names) { }
Это цикл, который перебирает все элементы в переменной массива $names. Каждый элемент «копируется» в переменную «$name», поэтому, когда вы работаете с $name
, вы работаете с текущим элементом в цикле.
"$name = " $name.length
Это выводит содержимое переменной $name и свойство «length» объекта, представленного $name. Если вы помните, мы объявили массив строковых элементов, другими словами, строковых объектов. Объекты Strings имеют свойства и методы, одним из таких свойств является length
свойство, которое указывает длину строки.
Однако обозначение немного странное. В PowerShell переменные, встроенные в строковые литералы (например, "start $name end"
, будут заменены их строковым значением, поэтому "start $name end"
станут start jones end
для первого элемента. Однако вы не можете просто написать "start $name.length end"
, поэтому в этом примере автор использовал для объединения (добавления) двух строк. Альтернативным решением этого было бы "$name = $($name.length))"
: таким образом, один строковый литерал будет содержать как строку, так и ее свойство length.