Bashの文字列内に配列名を持つ配列をコピーする

Bashの文字列内に配列名を持つ配列をコピーする

Bash 4.3スクリプトには変数があります。

環境="ローカル"
config_local=("a" "b" "b" "d")
copy_from="config_${環境}"

配列に保存されている名前の値をcopy_from別の配列にコピーしたいと思いますconfig

私はこれを試して、いくつかのバリエーションを試しました。

設定=${!copy_from}
エコ "${config[@]}"
設定=${!copy_from[@]}
エコ "${config[@]}"
設定 = ("${!copy_from}")
エコ "${config[@]}"
設定=(「${!copy_from[@]}」)
エコ "${config[@]}"

ただし、配列全体をコピーして最初の要素のみをインポートまたはインポートするconfigことはできません。0


0
0

Bashでどうすればいいですか?

答え1

これを行う方法はさまざまですevalが、安全ではありません。そこはいBash 2.05b+でこれを行ういくつかの方法:

$ foo=(a b c)
$ name=foo
$ temp_indirect=${name}[@]
$ printf '<%s>\n' "${!temp_indirect}"
<a>
<b>
<c>

これはbashパーサーの実装の詳細に依存するため(おそらく文書化されていませんか?)、非常に醜いので、リスクを取って使用してください。

一般に、複雑なデータ構造が必要な場合は、他の言語を使用することをお勧めします。多くの場合、bashでこれを可能にする回避策がありますが、言語がその言語に最適化されていないため、構文が難しくなります(ほとんどIPCおよびファイル操作に最適化されています)。

関連情報