我们要构建 6 个挂载点文件夹作为示例
/data/sdb
/data/sdc
/data/sdd
/data/sde
/data/sdf
/data/sdg
所以我们使用数组编写了这个简单的 bash 脚本
folder_mount_point_list="sdb sdc sdd sde sdf sdg"
folderArray=( $folder_mount_point_list )
counter=0
for i in disk1 disk2 disk3 disk4 disk4 disk5 disk6
do
folder_name=${folderArray[counter]}
mkdir /data/$folder_name
let counter=$counter+1
done
现在我们要更改没有计数器的代码和let=$counter=counter+1
是否可以移动每个循环数组以获得下一个数组值?
就像
${folderArray[++]}
要回答标题中的问题,您可以使用子字符串/子数组表示法“移位”一个数组。
shift
本身仅适用于位置参数。同样,要从数组中“弹出”最后一项:
a=("${a[@]:0:${#a[@]} - 1}" )
或unset "a[${#a[@]}-1]"
因此,如果您愿意,可以这样做:
但它会破坏数组,并且“移动”分配可能会不必要地复制数据,因此像往常一样进行索引可能会更好。
或者,如果您不关心项目的顺序,也可以使用关联数组。
"${!arr[@]}"
以未指定的顺序给出键,可能不是它们被分配的顺序:一般性评论。像这样定义一个数组是没有意义的:
你可以这样做:
现在回答你的问题:
或者
您可以简单地循环所有值,无需移位:
你不需要任何循环:
*
诀窍是,如果一个数组用下标( )双引号括起来,"${array[*]}"
它会扩展为一个单词,其中每个数组元素的值由IFS
变量的第一个字符分隔。之后,我们使用大括号扩展机制来附加/data/
到每个数组成员并eval
完成整个事情。您要问的问题是如何使用
++
来增加数组索引。像这样:
数组的索引(里面是什么
[]
)在算术环境中,所以后增量(++
)工作。标题上的问题使用术语
shift
。像位置参数一样移动可以通过重新构建数组来完成(一个缓慢的过程)。但是直接使用数组索引似乎更简单: