I have a script (in Node.js) named script.js which outputs the following string:
(1, 2, 3)I want to read it in a loop in the following way:
INDICES=$(node script.js)
for i in "{INDICES[@]}"
do echo $i
doneInstead of printing
1
2
3I get
(1, 2, 3)Since the script output is read as string.
How do I make it an array?
32 Answers
#!/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
donewhich give this output
./string_to_array.sh
1
2
3 Solution by Scott is pretty good, but it uses external processes. Here is a method that uses bash build-ins only:
#!/bin/bash
inputstr="(one, two, three)"
tempvar=$(echo $inputstr)
array=(${tempvar//[\(\),]/})
for value in "${array[@]}"; do echo "${value}"
done