当前位置: 首页 > 知识库问答 >
问题:

如何在bash中将字符串拆分为数组?

戎永福
2023-03-14

在Bash脚本中,我希望将一行拆分为几个部分,并将它们存储在数组中。

例如,给定行:

Paris, France, Europe

我希望得到的数组如下所示:

array[0] = Paris
array[1] = France
array[2] = Europe

一个简单的实现是优选的;速度不重要。我该怎么做呢?

共有1个答案

欧阳鸿德
2023-03-14
IFS=', ' read -r -a array <<< "$string"

请注意,$ifs中的字符被单独作为分隔符处理,因此在这种情况下,字段可以由逗号或空格分隔,而不是由两个字符的顺序分隔。有趣的是,当逗号空格出现在输入中时,空字段不会被创建,因为空格被特殊处理。

要访问单个元素,请执行以下操作:

echo "${array[0]}"

要迭代元素,请执行以下操作:

for element in "${array[@]}"
do
    echo "$element"
done

要同时获取索引和值:

for index in "${!array[@]}"
do
    echo "$index ${array[index]}"
done

最后一个示例很有用,因为Bash数组是稀疏的。换句话说,您可以删除一个元素或添加一个元素,然后索引就不连续了。

unset "array[1]"
array[42]=Earth

获取数组中的元素数:

echo "${#array[@]}"

如上所述,数组可以是稀疏的,所以不应该使用长度来获取最后一个元素。以下是在Bash4.2及更高版本中的方法:

echo "${array[-1]}"

在任何版本的Bash中(从2.05b之后的某个地方):

echo "${array[@]: -1:1}"

较大的负偏移量选择距离数组末尾较远的位置。请注意旧形式的减号前的空格。这是必需的。

 类似资料:
  • 问题内容: 我试图在网上四处寻找将字符串拆分为字符数组的答案,但似乎找不到一个简单的方法 似乎不像Ruby那样工作。有没有一种简单的方法可以不循环? 问题答案:

  • 问题内容: 我有一个,我想将其拆分为, 此拆分代码应适用于所有输入之王,例如ab123456和acff432等。如何拆分这种字符串。可能吗? 问题答案: 您可以尝试拆分像的正则表达式。试试这个: 将输出 您可以使用解析数字字符串为Integer 。

  • 问题内容: 我正在尝试找到一种将String拆分为String数组的方法,并且每当遇到白色香料时就需要对其进行拆分,例如 “嗨,我是保罗” 进入” “嗨”“我”“保罗” 如何使用RegularExpression在split()方法中表示空格? 问题答案: 您需要一个正则表达式,例如,这意味着: 每当遇到至少一个空格时就进行拆分 。完整的Java代码是:

  • 问题内容: 将字符串拆分为流的 最佳 方法是什么? 我看到了这些变化: 我的优先事项是: 坚固性 可读性 性能 一个完整的可编译示例: 问题答案: / 由于返回数组,因此我始终建议您使用流式处理数组的规范用法。 / 是一个 varargs 方法,它恰好接受一个数组,这是由于varargs方法是通过数组实现的,并且在将varargs引入Java以及改型为接受可变参数的现有方法时,存在兼容性方面的问题

  • 为什么下面的bash代码不起作用? 预期产出:

  • 我有一个字符串变量,它包括我试图排序的网格的列名。。 我希望将其拆分为一个包含4个值的字符串数组。我尝试了以下代码行: 然而,当我运行这个程序时,逗号仍然停留在该值上,因此我有例如和。如果没有逗号,如何拆分这些值?