루프를 사용하여 목록의 각 항목을 추가하는 방법은 무엇입니까?

루프를 사용하여 목록의 각 항목을 추가하는 방법은 무엇입니까?

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")

관련 정보