如何使用循环追加列表中的每个项目?

如何使用循环追加列表中的每个项目?

我正在尝试在 bash 中创建一个区域设置脚本,以自动将其设置lc_ctype为数组,然后设置为 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")

相关内容