Como anexar cada item na lista usando o loop?

3

Eu estou tentando criar um script de locale no bash para definir automaticamente o lc_ctype para o array e, em seguida, local-gen. O problema que estou enfrentando é acrescentar cada item da matriz ao local desejado.

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

A saída:

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

Como posso obter o resultado abaixo sem a vírgula?

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
    
por Jsdude 08.05.2017 / 20:27

3 respostas

2

Remover vírgulas:

declare -a arr=(
    "NUMERIC"
    "TIME"
    "MONETARY"
    "PAPER"
    "MEASUREMENT")
    
por 08.05.2017 / 20:32
2

A saída inesperada é devido às vírgulas na atribuição dos elementos da matriz. Estes podem ser removidos, pois não fazem parte da sintaxe e, portanto, não são necessários (a menos que você queira vírgulas, isto é).

Um loop menos complicado para você:

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

ou, sem o array:

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

Dependendo da finalidade deste exercício, pode ser interessante notar que definir o valor de LC_ALL terá o mesmo efeito que definir os valores de todas as variáveis LC_ individualmente para o mesmo valor.

    
por 09.05.2017 / 00:24
1

As vírgulas são do seu array, tente assim:

declare -a arr=(
    "NUMERIC"
    "TIME"
    "MONETARY"
    "PAPER"
    "MEASUREMENT")
    
por 08.05.2017 / 20:30