ループを使用してリスト内の各項目を追加するには?

ループを使用してリスト内の各項目を追加するには?

lc_ctypebashでロケールスクリプトを生成して自動的に配列に設定し、local-genに設定しようとしています。私が直面している問題は、各配列項目を目的のロケールに追加することです。

declare -a arr=(
    "NUMERIC",
    "TIME",
    "MONETARY",
    "PAPER",
    "MEASUREMENT")

lc_ctype="en_US.UTF-8"

for i in ${arr[@]};
  do
     lc="LC_${i}=$lc_ctype"
     echo $lc
  done

出力:

LC_NUMERIC,=en_US.UTF-8
LC_TIME,=en_US.UTF-8
LC_MONETARY,=en_US.UTF-8
LC_PAPER,=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8

コンマなしで次の出力をどのように取得できますか?

LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
LC_PAPER=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8

答え1

カンマを削除してください。

declare -a arr=(
    "NUMERIC"
    "TIME"
    "MONETARY"
    "PAPER"
    "MEASUREMENT")

答え2

予期しない出力は、配列要素の割り当て時にコンマが原因で発生します。これは構文の一部ではないため、必要ないので削除できます(カンマを使用しない限り)。

あまり複雑でないループを提供します。

printf "LC_%s=$lc_ctype\n" "${arr[@]}"

または配列なし:

printf "LC_%s=$lc_ctype\n" NUMERIC TIME MONETARY PAPER MEASUREMENT

この演習の目的に応じて値を設定することは、LC_ALLすべての変数の値を個別に同じ値に設定するのとLC_同じ効果があることに注意する価値があります。

答え3

コンマは配列から来ます。次のようにしてみてください。

declare -a arr=(
    "NUMERIC"
    "TIME"
    "MONETARY"
    "PAPER"
    "MEASUREMENT")

関連情報