Преобразовать строку bash в массив


3

У меня есть скрипт (в Node.js) с именем script.js, который выводит следующую строку:

(1, 2, 3)

Я хочу прочитать это в цикле следующим образом:

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

Вместо печати

1
2
3

я получил

(1, 2, 3)

Поскольку вывод скрипта читается как строка.

Как мне сделать это массив?


Я предлагаю вам спросить это на stackoverflow ...
djsmiley2k

@ djsmiley2k Почему? Вопросы Bash по теме здесь.
DavidPostill

@DavidPostill они есть? Хорошо. :)
djsmiley2k

Ответы:


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

которые дают этот вывод

./string_to_array.sh
1
2
3

2

Решение Скотта довольно хорошее, но использует внешние процессы. Вот метод, который использует только встроенные модули bash:

#!/bin/bash

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

for value in "${array[@]}"; do
  echo "${value}"
done
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.