我有以下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
答案 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}是你的索引号。)