arrays - 在 Bash 中将以空格分隔的字符串读入数组

标签 arrays string bash shell

我有一个包含空格分隔字符串的变量:

line="1 1.50 string"

我想用空格作为分隔符拆分该字符串并将结果存储在一个数组中,以便如下:

echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}

输出

1
1.50
string

我在某个地方找到了一个不起作用的解决方案:

arr=$(echo ${line})

如果我在此之后运行上面的 echo 语句,我会得到:

1 1.50 string
[empty line]
[empty line]

我也试过

IFS=" "
arr=$(echo ${line})

同样的结果。有人可以帮忙吗?

最佳答案

为了将字符串转换为数组,从字符串创建一个数组,让字符串根据 IFS(内部字段分隔符)变量自然拆分,默认为空格字符:

arr=($line)

或者使用 herestring ( read ) 运算符将字符串传递给 <<< 命令的标准输入:

read -a arr <<< "$line"

对于第一个示例,$line 周围使用引号是至关重要的,因为这是允许将字符串拆分为多个元素的原因。

另见:https://github.com/koalaman/shellcheck/wiki/SC2206

关于arrays - 在 Bash 中将以空格分隔的字符串读入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9293887/

相关文章:

java - 如何在 Java 中创建一个泛型数组?

用于二维文本数组上的类似矩阵转换的 JavaScript 库?

bash - 如何通过命令行将文件附加到 Mailgun?

javascript - 将数组数组转换为具有映射属性的对象数组

c - 使用指针打印二维数组时出错

python - Pandas 使用 DataFrame.query 根据字符串长度过滤字符串数据

java - 字符数错误(文件中的字符串操作)--Java

c# - 合并字符串的最佳方法是什么?

node.js - 从作为子进程运行的脚本将 Node 作为后台进程运行

linux - 在 Bash 脚本中嵌入密码