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およびファイル操作に最適化されています)。