bashで名前が2つの変数で構成される変数をエクスポートするには?

bashで名前が2つの変数で構成される変数をエクスポートするには?

forループ内で変数をエクスポートしようとしていますが、ループを繰り返すたびに作成される変数が変更されることを望みます。私はbashにエクスポートを満たすための正しい構文を探していましたが、私が試したことは成功しませんでした。これを行う正しい方法は何ですか?

詳細を追加するには、ループの実行時に最初の実行ではFVAR0、2番目の実行ではFVAR1、3番目の実行ではFVAR2などをエクスポートしたいと思います。

もともと努力したexport FVAR$i

export "${!FVAR[$i]}"これが私の最近の推測である。

#!/bin/bash
set -x
for i in 0 1 2 3 4
do
    export "${!FVAR[$i]}"=$(ls ./run/$i)
done


10:36:10 Thu Jan 24 ::  ./uploader.sh
+ for i in 0 1 2 3 4
++ ls ./run/0
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/1
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/2
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/3
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier
+ for i in 0 1 2 3 4
++ ls ./run/4
+ export =
./uploader.sh: line 5: export: `=': not a valid identifier

答え1

これは働きます:

#!/bin/bash

for x in 0 1 2 3; do
    export FVAR$x="Is's $x"
done

env | grep FVAR

実装する:

$ ./fvar.sh 
FVAR3=Is's 3
FVAR2=Is's 2
FVAR1=Is's 1
FVAR0=Is's 0

答え2

export "${!FVAR[$i]}"=...

FVARこれは配列を想定し、$iそのインデックスの要素を変数名として使用して、そのコマンドラインから拡張しようとします。 (つまり、is、isなのでa=11; b=22; c=33; p=(a b c); echo ${!p[1]}印刷されます。)22p[1]b$b22

FVAR[0]などはこのスクリプトに変数名を保存しないため、拡張すると空の文字列が生成されます。

あなたは利用可能でなければなりません

for i in 1 2 3 4 5; do
    export "FVAR$i=$(generate some value from $i)"
done

export拡張変数名を処理します。ただし、定期配分の場合には、この限りでない。FVAR$i=$(...)動作しません。


もちろん、何をするかに応じて、すべての値を変数に入れてエクスポートするなど、他の方法もあります。

FVARS="$(generate some value from 1)"
for i in 2 3 4 5 ; do
    FVARS+=":$(generate some value from $i)"
done
export FVARS

これを行うには、区切り文字として使用するいくつかの文字を予約し、区切り文字を正しい位置に配置するようにソートする必要があります。

関連情報