我是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
可以具有任何整数值,甚至可以是负数。它们的值将从输入的值中减去,就好像索引对应于。n
m
n
[index]
index-n = 0
n
但是您可以在自己的代码中做同样的事情,甚至做更多。您甚至可以通过以下方式反转数组的顺序:
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")
。