将相同的字符串分配给多个变量

将相同的字符串分配给多个变量

我想将其中包含的字符串分配$value给多个 BASH 变量。

实际上我之前给出的例子(var1=var2=...=$value)并没有完全反映我想要的。到目前为止,我发现了这个,但它仅在$value是整数时才有效:

$ let varT=varz=var3=$value

我怎样才能做到这一点?

答案1

在我看来,你最好只做更具可读性的事情:

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.

比照。 EDIT1:您仍然可以在新情况下使用大括号扩展:

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

printf它比注释中的方法更安全,因为它可以处理$value.

答案2

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

该循环遍历变量的名称。在循环体中,创建一个引用当前循环变量的名称引用变量。当名称引用变量的值被设置时,命名变量也被设置。

答案3

value=balabala
eval var{1..10}=\$value
echo $var{1..10}

答案4

你可以这样做:

declare {varT,varz}="$value"

相关内容