LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1083|回复: 5

数组赋值排序问题

[复制链接]
发表于 2003-4-30 18:22:01 | 显示全部楼层 |阅读模式
往一数组中加入新组元,要求对新的数组内各组元,按大小进行排序,然后成为一个新数组。实现方法如下,我看不明白:
echo $( (for i in "${array
  • } $1"; do
            echo $i; done) | sort -n),
    其中红色的$引用的什么变量?请教各位。

    1. ...
    2. local i
    3. if [ -n "$1" ]; then
    4.         array=($(echo $( (for i in "${array[*]} $1"; do
    5.                         echo $i; done) | sort -n) ))
    6. fi
    7. ...
    复制代码
  • 发表于 2003-4-30 19:34:44 | 显示全部楼层
    这是一个嵌套的命令替换,它替换的顺序是由里到外的,
    1,先执行最里面的(for...done),形成初始数组,未经排序的.
    2,第一个嵌套的结果经过管道|给sort命令重新组合,形成新的数组.
    3,echo $(...)是最后的变量替换,它将引用第二个嵌套的结果并显示出来.
    4,最后给排序后的元素赋值给数组array,也就是说最外边的()实际上是BASH数组赋值的方式,即,array=(...)
    是很绕得慌,不知道是否正确?
    javalee//home/javalee>bash #我喜欢KSH
    javalee//home/javalee>a=(1 2 9 5 3 6) #设置数组a
    javalee//home/javalee>b=$(echo $(for i in ${a
  • };do echo $i;done|sort -n))  #通过嵌套的方法设置数组b
    javalee//home/javalee>echo ${b
  • }
    1 2 3 5 6 9
  • 发表于 2003-4-30 19:54:31 | 显示全部楼层
    如果脚本比较大的话,我觉得尽量避免有过多的嵌套,可以通过预先定义变量的方法,这样脚本看起来清晰,便于阅读;)我使用的是KSH shell,定义数组引用数组跟BASH shell有些区别.
     楼主| 发表于 2003-4-30 20:29:25 | 显示全部楼层
    多谢javalee,明白了,
    echo $( command args )
    等价于
    a=$( command args )
    echo $a
    发表于 2003-4-30 22:49:07 | 显示全部楼层
    是的,其实处理数组和字符串的能力,还是用perl更方便,更实用,在shell脚本中,适当的调用perl,效果会更好,此所谓"互补"吗~~~
     楼主| 发表于 2003-4-30 23:11:52 | 显示全部楼层
    perl肯定是要学的,先写写bash,打个基础,下一步再攻perl,呵呵。javalee兄先行一步,到时找你取经。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表