複数の変数に同じ文字列を割り当てる

複数の変数に同じ文字列を割り当てる

$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

参照。編集1:新しい状況でも中括弧拡張を使用できます。

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

printfを処理できるため、Annotationのメソッドよりも安全です$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"

関連情報