bash 如何给数组插入元素

sh/bash/dash/ksh/zsh等Shell脚本
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

bash 如何给数组插入元素

#1

帖子 自由建客 » 2012-03-11 11:55

实际上我需要的是一个集合容器。
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: bash 如何给数组插入元素

#2

帖子 枫叶饭团 » 2012-03-11 11:57

直接赋值就行了吧。。。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何给数组插入元素

#3

帖子 自由建客 » 2012-03-11 12:00

下标都不知道,如何赋值!
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: bash 如何给数组插入元素

#4

帖子 枫叶饭团 » 2012-03-11 12:36

不知道有么有判断数组长度的函数
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何给数组插入元素

#5

帖子 自由建客 » 2012-03-11 14:04

有取长度的方法,但也不行。bash 的数组下标可非顺序,简直就是散列表。

代码: 全选

lst=("${lst[@]}" "$new")
这是我想到的唯一方法了!很蛋疼的方法!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: bash 如何给数组插入元素

#6

帖子 fnan » 2012-03-11 19:43

kose-1@kose-1-desktop:~$ a=('a' 'b' 'hello' 'c')
kose-1@kose-1-desktop:~$ a[${#a[@]}]="world"
kose-1@kose-1-desktop:~$ echo ${a[@]}
a b hello c world
kose-1@kose-1-desktop:~$ a=('a' 'b' 'hello' 'c')
kose-1@kose-1-desktop:~$ a=("${a[@]:0:3}" "world" "${a[@]:3}")
kose-1@kose-1-desktop:~$ echo ${a[@]}
a b hello world c
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何给数组插入元素

#7

帖子 自由建客 » 2012-03-11 20:10

fnan, 如果下标非顺序必死!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: bash 如何给数组插入元素

#8

帖子 fnan » 2012-03-12 19:21

bash下标是有顺序的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何给数组插入元素

#9

帖子 自由建客 » 2012-03-12 19:41

说错了,应该是说非连续。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: bash 如何给数组插入元素

#10

帖子 fnan » 2012-03-12 20:58

具体问题要具体对应的,不如给个具体例子看看那里不合适。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
woainvzu
帖子: 100
注册时间: 2010-12-27 22:44

Re: bash 如何给数组插入元素

#11

帖子 woainvzu » 2012-06-20 2:35

自由建客 写了:说错了,应该是说非连续。
非连续的也可以输出,用${!array[@]}作为循环条件,前提是bash 3.0版本以上,例如:

代码: 全选

array=([0]='a' [3]='b' [5]='c')
for i in "${!array[@]}"
do
    echo "$i -> ${array[$i]}"
done
结果为:

代码: 全选

@_@  02:29:56 Shell $ ./array_echo.sh 
0 -> a
3 -> b
5 -> c
上次由 woainvzu 在 2012-06-20 2:55,总共编辑 1 次。
woainvzu
帖子: 100
注册时间: 2010-12-27 22:44

Re: bash 如何给数组插入元素

#12

帖子 woainvzu » 2012-06-20 2:40

枫叶饭团 写了:不知道有么有判断数组长度的函数
${#array[@]} ${#array[*]}[/b],例如:

代码: 全选

array=([0]='a' [1]='b' [2]='c')
echo ${#array[@]}
echo ${#array[*]}
结果:

代码: 全选

@_@ 02:37:25 Shell $ ./array_echo.sh 
3
3
头像
自由建客
帖子: 13468
注册时间: 2008-07-30 23:21
系统: Debian stable AMD64

Re: bash 如何给数组插入元素

#13

帖子 自由建客 » 2012-06-20 12:25

死结,不说了,bash 太低级!
array=([0]='a' [17]='b' [19]='c')
根本无法保证插入后 array[19] 是合法的且其值是 c!
woainvzu
帖子: 100
注册时间: 2010-12-27 22:44

Re: bash 如何给数组插入元素

#14

帖子 woainvzu » 2012-07-02 16:58

自由建客 写了:死结,不说了,bash 太低级!
array=([0]='a' [17]='b' [19]='c')
根本无法保证插入后 array[19] 是合法的且其值是 c!
why not?
a.png
woainvzu
帖子: 100
注册时间: 2010-12-27 22:44

Re: bash 如何给数组插入元素

#15

帖子 woainvzu » 2012-07-02 17:03

只是append了新的数据之后,之前定义的index就失效了,不过有方法解决,1,输出重定向,2,赋值到新的数组。
只要想解决,总会有方法。。。
b.png
回复