Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字符串拆分成Bash中的数组?

如何将字符串拆分成Bash中的数组?

提问于 2017-12-22 01:23:04
回答 2关注 0查看 514

在一个Bash脚本中,我想将一行分成几块,并把它们放入一个数组中。

该行:

代码语言:txt
AI代码解释
复制
Paris, France, Europe

我想让他们像这样的数组:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
array[0] = Paris
代码语言:txt
AI代码解释
复制
array[1] = France
代码语言:txt
AI代码解释
复制
array[2] = Europe

我想用简单的代码,命令的速度并不重要。我该怎么做?

回答 2

心愿

发布于 2017-12-22 01:58:35

这是没有设置IFS的方法:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
string="1:2:3:4:5"
代码语言:txt
AI代码解释
复制
set -f                      # avoid globbing (expansion of *).
代码语言:txt
AI代码解释
复制
array=(${string//:/ })
代码语言:txt
AI代码解释
复制
for i in "${!array[@]}"
代码语言:txt
AI代码解释
复制
do
代码语言:txt
AI代码解释
复制
    echo "$i=>${array[i]}"
代码语言:txt
AI代码解释
复制
done

这个想法是使用字符串替换:

代码语言:txt
AI代码解释
复制
${string//substring/replacement}

用空格替换$ substring的所有匹配,然后使用替换的字符串来初始化一个数组:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
(element1 element2 ... elementN)

注意:这个答案使用了split + glob操作符。因此,为了防止某些字符(如*)的扩展,暂停此脚本的通配是一个好主意。

Dust

发布于 2017-12-22 01:56:19

代码语言:txt
AI代码解释
复制
IFS=', ' read -r -a array <<< "$string"

另外,在字符$IFS被单独视为分离器,使得在这种情况下,字段可以由被分离或者逗号或空间而不是两个字符的序列。有趣的是,当输入中出现逗号空格时,空字段不会被创建,因为空间被专门处理。

要访问一个单独的元素:

代码语言:txt
AI代码解释
复制
echo "${array[0]}"

迭代元素:

代码语言:txt
AI代码解释
复制
for element in "${array[@]}"
代码语言:txt
AI代码解释
复制
do
代码语言:txt
AI代码解释
复制
    echo "$element"
代码语言:txt
AI代码解释
复制
done

要同时获得索引和值:

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
for index in "${!array[@]}"
代码语言:txt
AI代码解释
复制
do
代码语言:txt
AI代码解释
复制
    echo "$index ${array[index]}"
代码语言:txt
AI代码解释
复制
done

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

代码语言:txt
复制
代码语言:txt
AI代码解释
复制
unset "array[1]"
代码语言:txt
AI代码解释
复制
array[42]=Earth

要获取数组中元素的数量:

代码语言:txt
AI代码解释
复制
echo "${#array[@]}"

如上所述,数组可以是稀疏的,所以你不应该使用长度来获得最后一个元素。以下是您可以在Bash 4.2和更高版本中使用的方法:

代码语言:txt
AI代码解释
复制
echo "${array[-1]}"

在任何版本的Bash(从2.05b之后的某处):

代码语言:txt
AI代码解释
复制
echo "${array[@]: -1:1}"

较大的负偏移距离阵列末端较远。请注意旧版本中减号前的空格。这是必需的。

和开发者交流更多问题细节吧,去 写回答
相关文章
bash 的字符串和数组
回顾下自己接触过的编程语言,字符串和数组真是基础中的基础。也因此,在接触一门新的语言的时候,非常有必要去熟悉该语言的字符串和数组。
IMWeb前端团队
2019/12/04
8940
bash 的字符串和数组
本文介绍了Shell字符串和数组的相关内容。字符串可以使用单引号、双引号或反斜杠进行括号和转义,而数组则可以使用大括号进行括号和初始化。字符串和数组的长度可以使用#或$符号进行获取。对于字符串,还可以使用特殊字符和转义序列进行更复杂的操作。数组操作则可以使用通配符、索引和循环进行。
IMWeb前端团队
2017/12/29
1.3K0
在Bash中如何将字符串转换为小写
其中 "^" 运算符将匹配模式的小写字母转换为大写;"," 运算符将匹配的大写字母转换为小写。"^^" 和 ",," 扩展将转换扩展值中的每个匹配字符;"^" 和 "," 扩展仅匹配并转换扩展值中的第一个字符。
程序熵
2023/10/16
6490
在Bash中如何将字符串转换为小写
bash中的字符串引用
bash中的字符串引用是一件很简单的事情,我们大多数人对此看一眼就能明了,但是今天这个技巧,也许能够帮你在未来节省不少时间。
大江小浪
2018/07/25
1.2K0
bash shell 中数组使用举例
版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。联系本人:ecsboy(微信),136625317(QQ) https://blog.csdn.net/solaraceboy/article/details/89054508
耕耘实录
2019/07/04
7710
如何将路径字符串数组(string[])转成树结构(treeNode[])?
这里说明一下,array2Tree()方法中的clientLabel参数其实可要可不要,也可继续扩展,根据自身业务而定。
唐志远
2023/08/01
4270
如何将路径字符串数组(string[])转成树结构(treeNode[])?
如何将路径字符串数组(string[])转成树结构(treeNode[])?
这里说明一下,array2Tree()方法中的clientLabel参数其实可要可不要,也可继续扩展,根据自身业务而定。
唐志远
2023/07/24
3980
如何将路径字符串数组(string[])转成树结构(treeNode[])?
数组分成若干组
<?php $uids = array(1,2,3,4,5,6,7); $uids_num = count($uids); $k = $j = 0; $uids_group = array(); fo
joshua317
2018/04/16
7170
mysql整型转字符串_java中如何将字符串转换为字符数组
select * from A order by cast(name as unsigned);
全栈程序员站长
2022/09/27
26.8K0
c++如何将字符串转为数组(将字符串转换为数组)
string [] imgArr=imgData.Split(new char[]{‘,’});
全栈程序员站长
2022/07/29
8.2K0
如何在Bash中获取数组长度?
在Bash脚本中,数组是一种常用的数据结构,用于存储多个值。在处理数组时,经常需要知道数组的长度,即数组中元素的个数。本文将详细介绍如何在Bash中获取数组长度的方法,以帮助您更好地处理数组操作。
网络技术联盟站
2023/06/17
2.1K0
如何在Bash中获取数组长度?
如何在 Bash 中抽取子字符串
本文介绍了如何在 Bash 中抽取子字符串,包括使用 IFS、cut 命令和编译自 Vivek Gite 的子字符串扩展方法。
企鹅号小编
2017/12/29
1.9K0
如何在 Bash 中抽取子字符串
Bash脚本编程之数组
array=( "${array[@]}" "new element" )或array[${#array[*]}]="new element"
枇杷李子橙橘柚
2019/05/26
7790
Bash处理数组系列函数
启用extdebug允许访问BASH_ARGV数组,该数组反向存储当前函数的参数。
程序员小涛
2021/12/06
4220
拆不拆?中台的架构合理吗?
每一个新概念的出现 仿佛都带着大干一番的势头 然而,理想美好,现实骨感 …… …… 随着科技加速,各行各业都在热烈地讨论如何完成数字化转型,数字化和智能化的东风席卷中华大地。 自从阿里提出了数据中台,“中台”这个概念就马上成为了国内大多数企业趋之若鹜的风口。 真正实施后发现,很多挑战不是依靠某种技术、工具或平台就可以完全解决的,于是好多机构开始忙着拆中台…… 那么问题出在了那里,中台真的是坑吗? ◆ 首先,什么是中台? 阿里构建数据中台的目标是one data,one service。 不论是数据中台,
博文视点Broadview
2022/03/14
7180
java中如何将数组转换为List
如何将其转换为ArrayList <Element> arraylist = ???
硬核编程
2020/07/23
3.9K0
如何将 Java 8 中的流转换为数组
最简单地方式就是使用 toArray(IntFunction<A[]> generator) 方法,该方法也是 Java API 所建议使用的方法,详情请戳
村雨遥
2022/06/15
4.8K0
bash字符串匹配
#!/bin/sh foo() {     local basedir=$1     local all_entries=`ls -c`     for entry in $all_entries     do           if test -d $entry; then             cd $entry&&foo ${basedir}/$entry;cd - >/dev/null         else             if [[ $entry
一见
2018/08/07
1.1K0
Bash处理数组系列函数
启用extdebug允许访问BASH_ARGV数组,该数组反向存储当前函数的参数。
程序员小涛
2021/02/23
4940
Bash处理数组系列函数
bash中的变量
bash中的变量 <span style="display: inline !important;float: none;background-color: transparent;color: rgb(51, 51, 51);font-family: " 0px;"="" sc","helvetica="" pingfang=""> 本文目录 1 局部变量与环境变量 2 设置变量 3 环境变量 局部变量与环境变量 在bash中,变量是一个用来存储数据的实体。每个变量都有一个名称和一个值,名称是变量的
mwangblog
2018/07/04
2.6K0

相似问题

如何将一个字符串拆分成一个列表?

2890

如何将多行输出捕获到Bash变量中?

2305

新客户打拆,老客户有优惠吗?

1281

如在Bash中提取子字符串?

1227

如何将通配符参数传递给bash文件

2284
相关问答用户
新浪微博 | 高级总监擅长4个领域
腾讯云TDP | 产品KOL擅长5个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档