将 bash 字符串转换为数组

将 bash 字符串转换为数组

我有一个名为 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

相关内容