在Linux Shell脚本中通过for循环访问数组

时间:2017-09-12 16:13:08

标签: arrays linux shell

我有以下shell脚本。 我面临的问题是,在第一次迭代中,$ {NUM [$ {i}]}返回数组的全部内容,并且每次后续迭代都返回空。 为什么会这样?

NUM="2 2 2 0"
i=0
    for CLIENT in ${BAG_CLIENTS} ; do
        if [ "$BFT" = true ]; then
          SERVERS="-$i"
        fi
        echo "Starting ${NUM[${i}]} clients with $PERCWRITES writes and $SERVERS serv$
        ssh rneiheiser@$CLIENT "~/runclient.sh $i ${NUM[${i}]} $PERCWRITES $SERVERS &$
        ((i++))
    done

1 个答案:

答案 0 :(得分:2)

您根本没有定义数组 - 您正在定义一个字符串。

以字符串形式访问数组时,仅返回其第一个项目。也就是说:

array=( "first item" "second item" )
echo "$array" ## echos only "first item"

当一个字符串作为一个数组被访问时,它就像一个单元素数组,只有它的第一个元素。

string="first item"
echo "${string[0]}" # also echos "first item"

如果要定义数组并将其作为数组访问,语法如下:

array=( "first item" "second item" "third item" )
echo "${array[0]}" # "first item", again.

# iterate over each element in turn
for item in "${array[@]}"; do
  echo "Iterating over array element $item"
done

...之后您可以展开"${array[@]}"的所有项目,使用"${!array[@]}"迭代索引,或访问${array[$idx]}的个人项目(其中{{1}是你的索引号。)