Назначить одну и ту же строку нескольким переменным

Чтобы создать собственную группу, добавьте users.groups.johns = {name = "John's"; members = "Джон"; gid = 1666}; . См. также man configuration.nix , где описаны все параметры.

5
15.05.2019, 12:39
4 ответа

На мой взгляд, вам лучше просто сделать более читабельным:

var1="$value" var2="$value" var3="$value" var4="$value" var5="$value" var6="$value" var7="$value" var8="$value" var9="$value" var10="$value"

Но если вам нужен очень короткий способ добиться этого, попробуйте:

declare var{1..10}="$value"

Отредактировано:с использованием раскрытия фигурных скобок вместо printf и объявления вместо eval, что может быть опасно в зависимости от того, что находится в $value.

См. РЕДАКТИРОВАТЬ1 :Вы все еще можете использовать расширения фигурных скобок в новом случае:

declare var{T,z,3}="$value"

Это безопаснее, чем подход printfв комментариях, потому что он может обрабатывать пробелы в $value.

9
27.01.2020, 20:32
value=balabala
eval var{1..10}=\$value
echo $var{1..10}
3
27.01.2020, 20:32

letвыполняет арифметическую оценку. В bashэто эквивалентно ((... )). Вот почему ваш код работает только для целых чисел.

Использование массива вместо переменных со специальными именами:

var=( "$value"  "$value" "$value" "$value" "$value" "$value" "$value" "$value" "$value" "$value" )

printf 'var[5]=%s\n' "${var[5]}"

или ассоциативный массив,

declare -A var

var=( ["T"]=$value ["z"]=$value [3]=$value )

printf 'var[T]=%s\n' "${var["T"]}"

Вы также можете сделать цикл:

for varname in var0 var1 varT varfoo; do
    declare -n var="$varname"
    var=$value
done

Этот цикл перебирает имена переменных. В теле цикла создается ссылочная переменная имени, которая ссылается на текущую переменную цикла. Когда значение переменной ссылки имени установлено, устанавливается именованная переменная.

7
27.01.2020, 20:32
Value='-%% this is a test %%-'
for VarName in myVar1 myVar2 myOtherVar; do printf -v "$VarName" %s "$Value"; done
2
27.01.2020, 20:32

Теги

Похожие вопросы