【问题标题】:Shell script arraysShell 脚本数组
【发布时间】:2012-01-22 16:11:57
【问题描述】:

我想用循环设置数组元素:

for i in 0 1 2 3 4 5 6 7 8 9
do
array[$i] = 'sg'
done

echo $array[0]
echo $array[1]

所以它不起作用。 如何..?

【问题讨论】:

  • 你知道seq命令吗?你可以用 $(seq 0 9) 替换你的数字
  • 您需要小心,因为有些 shell 没有数组。如果你想写可移植的sh,你根本不能使用数组。
  • 绝对是一个bashism,我已经修复了标签。

标签: linux arrays bash loops


【解决方案1】:

删除空格:

array[$i]='sg'

此外,您应该以*的形式访问元素:

echo ${array[0]}

参见例如http://tldp.org/LDP/abs/html/arrays.html.


* 感谢@Mat 提醒我这一点!

【讨论】:

    【解决方案2】:

    你的回显语句有问题:给${array[0]}${array[1]}

    【讨论】:

      【解决方案3】:

      如果您将变量声明为数组并正确打印它,它应该可以工作:

      declare -a array
      for i in 0 1 2 3 4 5 6 7 8 9 
      do
          array[$i]="sg"
      done
      echo ${array[0]} 
      echo ${array[1]} 
      

      看到它在行动here

      HTH

      【讨论】:

        【解决方案4】:

        我对那个循环的看法:

        array=( $(yes sg | head -n10) )
        

        甚至更简单:

        array=( sg sg sg sg sg sg sg sg sg sg )
        

        请参阅 http://ideone.com/DsQOZ 以获得一些证据。另请注意,bash 4+ readarray:

        readarray array -t -n 10 < <(yes "whole lines in array" | head -n 10)
        

        事实上,readarray 是最通用的,例如将名称中带有 bash 的前 10 个进程的 PID 放入数组中(如果没有 10 个这样的进程,它可能返回一个数组大小

        readarray array -t -n 10 < <(pgrep -f bash)
        

        【讨论】:

        • 添加了readarray,它可以轻松地允许嵌入空格
        【解决方案5】:
        # Declare Array
        
        NAMEOFSEARCHENGINE=( Google Yahoo Bing Blekko Rediff )
        
        # get length of an array
        arrayLength=${#NAMEOFSEARCHENGINE[@]}
        
        # use for loop read all name of search engine
        for (( i=0; i<${arrayLength}; i++ ));
        do
          echo ${NAMEOFSEARCHENGINE[$i]}
        done
        

        输出:

        谷歌
        雅虎
        必应
        布莱克
        重新比较

        【讨论】:

          猜你喜欢
          • 2010-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-28
          • 2022-10-24
          • 2016-03-01
          • 2017-05-31
          相关资源
          最近更新 更多