Bash Shell脚本自增量计数作为数组索引

Bash Shell脚本自增量计数作为数组索引,bash,shell,Bash,Shell,下面是一个简单的shell脚本代码,它迭代收入文件并将该行保存到数组中。但是line4不应该是这样的吗 cusips[$i]而不是cusips[i]?还是没关系?看来两个都起作用了 谢谢, 约翰 区别在于在计算算术表达式之前是否替换该值 例如,这些都是相同的: array=(1 1 2 3 5) i=0 echo "${array[i]}" # Look up the variable i echo "${array[$i]}" # Substitute the value of i: l

下面是一个简单的shell脚本代码,它迭代收入文件并将该行保存到数组中。但是line4不应该是这样的吗 cusips[$i]而不是cusips[i]?还是没关系?看来两个都起作用了

谢谢, 约翰


区别在于在计算算术表达式之前是否替换该值

例如,这些都是相同的:

array=(1 1 2 3 5)
i=0
echo "${array[i]}"   # Look up the variable i
echo "${array[$i]}"  # Substitute the value of i: look up the value 0
echo "${array[0]}"   # Look up the value 0, just like above
但是,当您开始对变量而不是值执行操作时,情况会有所不同:

echo "${array[i++]}"   # Increment variable i
echo "${array[$i++]}"  # 0++: syntax error: operand expected
echo "${array[0++]}"   # Makes no sense, just like above
因为您可以增加一个变量,但不能增加一个数字,i++可以,而0++不能,所以在用$计算变量之前,您不能用变量替换其内容

对于所有其他计算为算术表达式的语法,如$。。。您可以用i++替换您的,但不能用$i++


请注意,如果使用关联数组,索引将作为字符串而不是算术表达式计算,因此${array[i]}将查找字母i,而${array[$i]}将查找数字0

例如,在几个不同的地方,我看到了这句话:

在表达式中,shell变量也可以通过名称引用,而不使用参数扩展语法

在数组的方括号内,在算术表达式的上下文中解释事物。根据上面有点简洁的句子,这里不需要参数扩展语法,我认为它是指变量名前面的$-符号


如果包含$-符号,则正常参数扩展使其工作;如果你不把它放进去,那么这个与算术表达式相关的规则会使它起作用。最终的结果是他们都工作,你可以选择你的

你能澄清一下你的最后一段吗?你的两个例子看起来和我一模一样——也许我看错了什么?哦,对不起
echo "${array[i++]}"   # Increment variable i
echo "${array[$i++]}"  # 0++: syntax error: operand expected
echo "${array[0++]}"   # Makes no sense, just like above