lc_ctype
bash에서 로케일 스크립트를 생성하여 자동으로 배열로 설정한 다음 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")