+ -
当前位置:首页 → 问答吧 → 数组问题

数组问题

时间:2011-07-02

来源:互联网

shell里 数组的分隔符是空格,如果数组里的内容包含空格怎么办?
比如说我从一个文件中读取一行,让他等于变量key
key=signal 14#signal 16#signal 17.....
怎么把key变成数组得到一下结果,结果是用于FOR循环的。
key[1]=signal 14
key[2]=signal 16
.......

我用了一下split,总是出不来我要的结果, 请大大忙我。谢谢

作者: zealveryme   发布时间: 2011-07-02

本帖最后由 yinyuemi 于 2011-07-02 11:08 编辑

回复 zealveryme

一种办法:
  1. eval $(echo 'key=signal 14#signal 16#signal 17' |awk '{l=split($0,key,/key=|#/);for(i=2;i<=l;i++)print "key["i-1"]=\""key[i]"\""}')

  2. i=0;while [[ $i -lt ${#key[@]} ]]; do ((i++)); echo "key["$i"]="${key[$i]}; done
  3. key[1]=signal 14
  4. key[2]=signal 16
  5. key[3]=signal 17
复制代码

作者: yinyuemi   发布时间: 2011-07-02

太强了,看懂有些费劲,但是确实解决我的问题。
能再解释一下 ${#key[@]} 是表示数组长度吗?和为什么要用eval吗?
还有一个基础问题
a="aaa bbb ccc"
echo $a[1]
以上两句的结果为什么空,echo不出值?

作者: zealveryme   发布时间: 2011-07-02

回复 zealveryme


${#array[@]} 数组长度

eval 执行awk打印的结果如:
  1. eval array[1]="aaa"
复制代码
这样就"aaa"便赋值给数组array。

另外,也可以这样:
  1. $ a=("aaa" "bbb ccc")

  2. echo ${a[0]}
  3. aaa

  4. echo ${a[1]}
  5. bbb ccc
复制代码

作者: yinyuemi   发布时间: 2011-07-02