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

use*_*707 2 linux arrays 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
Run Code Online (Sandbox Code Playgroud)

Cha*_*ffy 8

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

当将数组作为字符串访问时,仅返回其第一项。也就是说:

array=( "first item" "second item" )
echo "$array" ## echos only "first item"
Run Code Online (Sandbox Code Playgroud)

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

string="first item"
echo "${string[0]}" # also echos "first item"
Run Code Online (Sandbox Code Playgroud)

如果您想定义一个数组并将其作为数组访问,语法如下:

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
Run Code Online (Sandbox Code Playgroud)

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