我想将其中包含的字符串分配$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"