我是bash的新手,找不到很好的教程来回答我的问题。
array=( item1 item2 item3)
for name in ${array[@]}; do
echo current/total
... some other codes
done
我想计算“当前”和“总计”值,因为它的预期输出为:
1/3
2/3
3/3
谢谢你的提示
我是bash的新手,找不到很好的教程来回答我的问题。
array=( item1 item2 item3)
for name in ${array[@]}; do
echo current/total
... some other codes
done
我想计算“当前”和“总计”值,因为它的预期输出为:
1/3
2/3
3/3
谢谢你的提示
Answers:
您可以使用来访问数组索引,${!array[@]}并使用来访问数组的长度${#array[@]},例如:
#!/bin/bash
array=( item1 item2 item3 )
for index in ${!array[@]}; do
echo $index/${#array[@]}
done
请注意,由于bash数组的索引为零,因此您实际上会得到:
0/3
1/3
2/3
如果你想计数从1运行,你可以替换$index的$((index+1))。如果您需要值和索引,可以使用"${array[index]}"即
#!/bin/bash
array=( item1 item2 item3 )
for index in ${!array[@]}; do
echo $((index+1))/${#array[@]} = "${array[index]}"
done
给予
1/3 = item1
2/3 = item2
3/3 = item3
echo ($index+1)/${#array[@]}吗?
如果您认为索引实际上是相对于数组基地址的偏移量,则零索引是完全有效的。尽管这在方言之间有所不同,但实际上这是规范。使用旧的Jovial语言,[0]实际上包含了数组的最大大小。所以它开始于[1]。
使用某些基本实现,您可以任意选择将0或1作为第一个索引。并且至少有一个Basic允许您指定数组以索引从[n]到[m]。只要小于或等于,则n和m可以具有任何整数值,甚至可以是负数。它们的值将从输入的值中减去,就好像索引对应于。nmn[index]index-n = 0n
但是您可以在自己的代码中做同样的事情,甚至做更多。您甚至可以通过以下方式反转数组的顺序:
dim array(0, abs(m-n));
step=sign(m-n);
if n > m then
base=m
else
base=n;
fi
此代码示例实际上仅是一种语言的一部分。我只是想让它更具可读性。step变量用于控制正向或负向移动的视在方向,并用于计算进入或离开数组时的有效索引,实际上从总是为正[0]。
${array[@]}用双引号引起来。否则,将在诸如之类的输入上执行分词,并且您会得到不希望的结果array=("item 1" "item 2" "item 3")。