Converter string bash para array

3

Eu tenho um script (em Node.js) chamado script.js, que gera a seguinte string:

(1, 2, 3)

Eu quero lê-lo em um loop da seguinte maneira:

INDICES=$(node script.js)
for i in "{INDICES[@]}"
do
    echo $i
done

Em vez de imprimir

1
2
3

Eu obtenho

(1, 2, 3)

Como a saída do script é lida como string.

Como faço para criar uma matriz?

    
por Jjang 05.04.2017 / 16:48

2 respostas

2
#!/bin/bash

inputstr="(1, 2, 3)"

newstr=$(echo $inputstr | sed 's/[()]//g' ) # remove ( and )

IFS=', ' read -r -a myarray <<< "$newstr" # delimiter is ,

for index in "${!myarray[@]}"
do
    # echo "$index ${myarray[index]}"  #  shows index and value
      echo        "${myarray[index]}"  #  shows           value
done

que fornecem essa saída

./string_to_array.sh
1
2
3
    
por 05.04.2017 / 17:04
2

A solução da Scott é muito boa, mas usa processos externos. Aqui está um método que usa apenas os build-ins bash:

#!/bin/bash

inputstr="(one, two, three)"
tempvar=$(echo $inputstr)
array=(${tempvar//[\(\),]/})

for value in "${array[@]}"; do
  echo "${value}"
done
    
por 05.04.2017 / 17:26

Tags