shell脚本,循环数组,为什么要使用$ {array [@]}

时间:2013-11-28 06:14:36

标签: shell

什么是“@”的含义, 代码:

#!/bin/bash

array[0]=1
array[1]=2
array[2]=3
array[3]=4
array[4]=5

#work
for num in ${array[@]}
do
    echo $num
done

#not work
for num in array
do
    echo $num
done

在循环中,为什​​么要使用$ {array [@]}而不是$ array,thx

3 个答案:

答案 0 :(得分:1)

这是该语言定义的语法。这就是它的工作原理。在man bash中阅读相关内容,搜索标题为“数组”的部分。这是相关部分:

  

可以使用$ {name [subscript]}引用数组的任何元素。          需要大括号以避免与路径名扩展冲突。如果          下标是@或*,单词扩展为name的所有成员。这些          只有当单词出现在双引号内时,下标才有所不同。如果          单词是双引号,$ {name [*]}扩展为单个单词          每个数组成员的值由IFS的第一个字符分隔          特殊变量,$ {name [@]}将名称的每个元素扩展为sep-          arate word。如果没有数组成员,$ {name [@]}将扩展为          没有。如果双引号扩展发生在一个单词内,则          扩展第一个参数与开头部分连接起来          原始单词,并加入最后一个参数的扩展          用原始单词的最后一部分。这类似于          扩展特殊参数*和@(参见特殊参数          上文)。

答案 1 :(得分:0)

$array不像数组一样工作。它更像是${array[0]}

答案 2 :(得分:0)

$array计算数组中的第一个元素。您必须使用${array[@]}(或更恰当地"${array[@]}")依次指示数组的每个元素,并以$IFS的第一个字符分隔。