BASH 数组用法小结

BASH只支持一维数组,但参数个数没有限制。
 
声明一个数组:
declare -a array

(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组)
 
数组赋值:
(1) array=(var1 var2 var3 ... varN)
(2) array=([0]=var1 [1]=var2 [2]=var3 ... [n]=varN)
(3) array[0]=var1
    arrya[1]=var2
    ...
    array[n]=varN
   
计算数组元素个数:
${#array[@]}  或者  ${#array[*]}
 
BASH的特殊参数 @ 和 * 都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。
 
引用数组:
echo ${array[n]}
 
遍历数组:
filename=(`ls`)
for var in ${filename[@]};do
echo $var
done
 
数组实用示例:(个人收集整理)
 
1、从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里
i=0
n=5
while [ "$i" -lt $n ] ; do
  echo "Please input strings ... `expr $i + 1`"
  read array[$i]
  b=${array[$i]}
  echo "$b"
  i=`expr $i + 1`
done
 
2、将字符串里的字母逐个放入数组,并输出到“标准输出”
chars='abcdefghijklmnopqrstuvwxyz'
for (( i=0; i<26; i++ )) ; do
    array[$i]=${chars:$i:1}
    echo ${array[$i]}
done
 
这里有趣的地方是 ${chars:$i:1},表示从chars字符串的 $i 位置开始,获取 1 个字符。如果将 1 改为 3 ,就获取 3 个字符啦~ 结果是:
abc
bcd
...
vxy
xyz
yz     //没有足够字符串获取了
z      //没有足够字符串获取了
3、将数组应用到shell环境变量
 
3、将数组应用到shell环境变量(1)
 
数组赋值:
[root@pps ~]# SEASON=("Srping" "Summer" "Autumn" "Winter")
当你发现赋值错了,也可以立刻从新赋值纠正,如上面的 Spring 被写成 Srping。
重新赋值:(原来的值被重写)
[root@pps ~]# SEASON=("Spring" "Summer" "Autumn" "Winter")
 
查看一下环境变量:
[root@pps ~]# set | grep SEASON
SEASON=([0]="Spring" [1]="Summer" [2]="Autumn" [3]="Winter")
 
显示整个数组:
[root@pps ~]# echo ${SEASON[*]}  或者 echo ${SEASON[@]}
Spring Summer Autumn Winter
 
显示某一数组元素:
[root@pps ~]# echo ${SEASON[3]}
Winter
 
给单个数组元素赋值:
[root@pps ~]# SEASON[0]="New_Spring"
 
再查看一下看数组:
[root@pps ~]# echo ${SEASON[*]}
New_Spring Summer Autumn Winter
 
清除指定的单个数组元素:
[root@pps ~]# unset SEASON[2]
 
清除整个数组:
[root@pps ~]# unset SEASON
 
4、将数组应用到shell环境变量(2) 【这个用法不错!给原作者赞一个!】
 
使用tr命令将文件中的回车转换成空格:
[root@pps ~]# cat /etc/shells | tr "/n" " " > /tmp/tmp.file
 
将文件中内容给数组赋值:(碰到第一个回车符之前的内容)
[root@pps ~]# read -a SHELLS < /tmp/tmp.file
 
查看数组赋值情况:
[root@pps ~]# set | grep "SHELLS"
SHELLS=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/ksh")
 
后面可以将这个数组环境变量应用到其它的SHELL脚本或者应用程序里了~

### 如何在编程中创建数组 #### Java 中的数组创建 在 Java 中,可以通过声明和初始化的方式来创建数组。具体语法如下: ```java <数据类型>[] <数组名称> = new <数据类型>[<数组长度>]; ``` 例如,要创建一个整型数组并指定其大小为 5,则可以写成 `int[] numbers = new int[5];`[^1]。 还可以通过直接赋值的方式一次性完成数组的创建与初始化: ```java int[] numbers = {1, 2, 3, 4, 5}; ``` --- #### Python 中的数组创建 Python 并没有原生支持传统意义上的数组,但通常会使用列表或者 NumPy 库中的 ndarray 来实现类似功能。以下是两种常见方式: 1. **使用列表** 可以直接用方括号 `[ ]` 创建一个列表作为数组替代品: ```python array_like_list = [1, 2, 3, 4, 5] ``` 2. **使用 NumPy 的数组** 如果需要更强大的数值计算能力,推荐使用 NumPy 提供的数组工具。例如: - 使用 `numpy.array()` 将现有数据结构转化为数组: ```python import numpy as np arr_from_list = np.array([1, 2, 3, 4]) ``` - 或者利用内置函数快速生成特定模式的数组: ```python zeros_array = np.zeros(5) # 创建包含五个零的浮点数数组 ones_array = np.ones((2, 3)) # 创建二维数组,填充一 range_array = np.arange(10) # 类似于 range 函数的效果 ``` 对于某些特殊情况下的转换需求,也可以借助 `numpy.asarray()` 方法高效处理已有对象到数组形式的变化过程[^2]。 --- #### Shell 脚本中的数组定义 Shell 编程环境下同样允许定义数组变量来进行批量管理项目集合的操作。基本格式如下所示: ```bash 数组名=(元素1 元素2 元素3 ...) ``` 实例演示: ```bash array1=(10 20 30 40 50 60) echo ${array1[@]} # 输出整个数组的内容 echo ${array1[2]} # 访问索引位置上的单个成员(注意这里是从下标0开始计数) ``` 另外还有一种较为少见但是有效的做法即逐项追加法构建动态增长型数组[^3]: ```bash declare -a anotherArray anotherArray+=("first item") anotherArray+=("second one") ``` --- #### JavaScript 中复制及新建数组 JavaScript 支持多种途径达成创建新数组的目的,其中一种特别值得注意的技术叫做解构表达式(`...`)用来制作独立副本而非仅仅共享引用关系的对象链接情况。下面给出一段示范代码片段说明这一机制的实际运用场景[^4]: ```javascript var originalArr = ['apple', 'banana']; let newArr = [...originalArr]; // 利用扩展运算符克隆源数组 newArr.push('cherry'); console.log(originalArr); // 显示['apple','banana'] console.log(newArr); // 展现['apple','banana','cherry'] ``` 此外,在 ES6 版本之后引入了许多便捷的新特性使得操作更加简洁直观比如 Array.from 构造器等等均能很好地满足日常开发工作所需。 --- #### C/C++ 动态内存分配创建数组 当涉及到低级语言如C或C ++时,由于缺乏高级别的抽象层面上的支持所以往往依赖显式的指针管理和堆空间请求来达到灵活调整规模的目标。典型例子见下述程序清单展示了如何依据输入参数决定实际所需的存储单元数量从而实现运行时期间才可确定尺寸的大容量容器配置方案[^5]: ```cpp #include <iostream> using namespace std; int main(){ int size; cout << "Enter the number of elements: "; cin >> size; double* dynamicArray = new double[size]; for(int i=0;i<size;i++){ dynamicArray[i]=i*i; // 初始化一些测试数据 } delete []dynamicArray; //记得释放资源以免泄漏 } ``` 以上各部分分别介绍了不同主流编程环境中关于怎样去构造适合各自特性的数组实体的知识要点总结归纳完毕。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值