前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你了解如何使用Bash的数组吗?

你了解如何使用Bash的数组吗?

作者头像
王诗翔呀
发布2021-09-03 11:48:27
3K0
发布2021-09-03 11:48:27
举报
文章被收录于专栏:优雅R优雅R

之前使用Shell编程很少使用到数组,最近尝试使用后发现它在某些情况下非常有用。这里简单介绍如何生成和使用数组。

生成数组

我们只要将一组空格分隔的序列用括号括起来,就生成了一个数组。

代码语言:javascript
复制
array=(a b c d e f g)

使用数组

输出数组

使用{array[*]}或{array[@]}输出全部元素:

代码语言:javascript
复制
bash-3.2$ echo ${array[*]}
a b c d e f g
bash-3.2$ echo ${array[@]}
a b c d e f g

array前加#输出元素个数:

代码语言:javascript
复制
bash-3.2$ echo ${#array[*]}
7

获取元素将*改成索引,记得是从0开始:

代码语言:javascript
复制
bash-3.2$ echo ${array[1]}
b
bash-3.2$ echo ${array[2]}
c

注意在非引用的情况下不需要美元符号和花括号,例如修改元素:

代码语言:javascript
复制
bash-3.2$ array[2]=ff
bash-3.2$ echo ${array[2]}
ff

迭代数组:

代码语言:javascript
复制
#for i in "${!array[@]}"; do 
#  printf "%s\t%s\n" "$i" "${array[$i]}"
#done

bash-3.2$ for i in "${!array[@]}"; do 
>   printf "%s\t%s\n" "$i" "${array[$i]}"
> done
0  a
1  b
2  ff
3  d
4  e
5  f
6  g

注意我们常用的序列生成命令seq并不会生成一个数组,哪怕你可以迭代它:

代码语言:javascript
复制
bash-3.2$ echo `seq 1 10`
1 2 3 4 5 6 7 8 9 10
bash-3.2$ a2=`seq 1 10`
bash-3.2$ echo ${a2}
1 2 3 4 5 6 7 8 9 10
bash-3.2$ echo $a2
1 2 3 4 5 6 7 8 9 10
bash-3.2$ echo ${a2[1]}

bash-3.2$ echo ${a2[2]}

bash-3.2$ echo ${a2[0]}
1 2 3 4 5 6 7 8 9 10
bash-3.2$ for i in $a2; do echo $i; done
1
2
3
4
5
6
7
8
9
10

下一节我们再看如何转换。

数据处理中利用数组

如果你有一定的数据分析经验,会比较容易发现上面的知识并不能带来什么用处。在数据处理中使用数组,我们需要掌握一点技巧。

以可编程的方式引用数组元素

在实际处理时,我们一般不可能会手动地指定元素在所在数组中的索引。所以,我们需要一种办法做到。

其实也很简单,将索引直接用Shell变量替换即可:

代码语言:javascript
复制
bash-3.2$ idx=2
bash-3.2$ echo ${array[$idx]}
ff

使用时一定要注意不同符号的位置关系。

序列转换为数组

我们先看看怎么将a2转换为数组。

将序列转换为数组,还是使用()

代码语言:javascript
复制
bash-3.2$ echo $a2
1 2 3 4 5 6 7 8 9 10
bash-3.2$ a3=($a2)
bash-3.2$ echo $a3
1
bash-3.2$ echo ${#a2[*]}
1
bash-3.2$ echo ${#a3[*]}
10
bash-3.2$ echo ${a3[*]}
1 2 3 4 5 6 7 8 9 10

注意美元符两侧不要加引号。

这样我们就能够愉快地将命令生成的序列数组化,然后单个获取和操作其中的元素了:

代码语言:javascript
复制
bash-3.2$ touch file{1..10}
bash-3.2$ files=(`ls file*`)
bash-3.2$ echo ${files[3]}
file3
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 生成数组
  • 使用数组
    • 输出数组
    • 数据处理中利用数组
      • 以可编程的方式引用数组元素
        • 序列转换为数组
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档