我有一个名为 script.js 的脚本(在 Node.js 中),它输出以下字符串:
(1, 2, 3)
我想按以下方式循环读取它:
INDICES=$(node script.js)
for i in "{INDICES[@]}"
do
echo $i
done
而不是打印
1
2
3
我明白了
(1, 2, 3)
因为脚本输出被读取为字符串。
我如何使其成为一个数组?
答案1
#!/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
Scott 的解决方案很不错,但是它使用了外部进程。下面是一种仅使用 bash 内置程序的方法:
#!/bin/bash
inputstr="(one, two, three)"
tempvar=$(echo $inputstr)
array=(${tempvar//[\(\),]/})
for value in "${array[@]}"; do
echo "${value}"
done