タグ付けされた質問 「associative-array」

5
BASH連想配列印刷
すべての要素をループすることなく、配列全体([key] = value)を印刷する方法はありますか? いくつかの要素を持つ配列を作成したと仮定します。 declare -A array array=([a1]=1 [a2]=2 ... [b1]=bbb ... [f500]=abcdef) 配列全体を印刷して戻すことができます for i in "${!array[@]}" do echo "${i}=${array[$i]}" done ただし、bashはすべての配列要素を1つの "go"(キー${!array[@]}と値の両方)で取得する方法を既に知っているようです${array[@]}。 ループなしでこの情報をbashに出力させる方法はありますか? 編集: typeset -p arrayそれは! ただし、1回の置換でプレフィックスとサフィックスの両方を削除することはできません。 a="$(typeset -p array)" b="${a##*(}" c="${b%% )*}" 出力のキー=値部分のみを取得/印刷するよりクリーンな方法はありますか?

4
シェルスクリプトの連想配列
連想配列をシェルスクリプトに実装するトリックを見ました。たとえば、key = apples print array["apples"]としてスクリプト化できますecho \$array$key。 ただし、配列を反復処理するためのキーを生成する方法については言及されていません。スペースで区切られた変数にキーを格納して、forループを使用して配列を反復できるようにすることしか考えられませんでした。 それで、後で使用するためにキーを格納する他の方法はありますか?

1
連想配列をパラメーターリストとしてスクリプトに渡す
スクリプトには、次のような連想配列があります。 declare -A VARS=( ["key1"]="value1" ["key2"]="value" ) それをフォームのパラメータリストに変換する単一のコマンドはありますか --key1=value1 --key2=value2 手動で書き直す必要なし --key1="${VARS[key1]}" --key2="${VARS[key2]}" 私が考えていたユースケースは、次のように、パラメータのリストとして配列をスクリプトに渡すことでした。 my_script.sh $(to_param_list $VARS) @Kusalanandaの回答で行ったコメントをさらに詳しく説明すると、私の正確な使用例は次のとおりです。makeselfを使用して自己解凍インストーラーをビルドするために使用するスクリプトがあり、このスクリプトは、次のように分離されるパラメーターを受け取ります。 スクリプト自体のパラメーター 自己解凍インストーラー内のインストーラーのパラメーター 次に、スクリプトは次のようにインストーラーをビルドします。 to_param_list installer_param_list installer_param_array ./makeself ./path/to/sourcedir ./path/to/created/installer "My installer" ./path/to/install/inside/package "${installer_param_list[@]}" ただし、パッケージ内の非常に単純なインストーラースクリプトを使用してパラメーターの受け渡しをテストしました。 while ! -z "$1" ; do echo "$1" shift done 次のような配列を渡します: installer_param_array=( ["upgrade-from"]="19 .2.0" ["upgrade-to"]="19.3.0" ) この出力結果: --upgrade-to=19.3.0 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.