Convert bash string to array

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
done

Instead of printing

1
2
3

I get

(1, 2, 3)

Since the script output is read as string.

How do I make it an array?

3

2 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
done

which 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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like