在 Bash 中,我可以使用${parameter:offset:length}
符号对数组的元素进行切片,但我不能以与切片字符串时相同的方式使用它。具体来说,我想使用这种语法来打印除了n
数组的最后一个元素之外的所有元素:
注意:--version
输出是元语法,而不是我的问题的意图
calvin@rose:~ A=($(bash --version |head -1)); echo ${A[@]}
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
calvin@rose:~ echo ${A[3]:0:-8} # Negative length of substring
4.4.12(1)
calvin@rose:~ echo ${A[@]:2:2} # Predictable behavior with [@]
version 4.4.12(1)-release # Desired output
calvin@rose:~ echo ${A[@]:2:-1} # Desired input
-bash: -1: substring expression < 0 # Limitation of Bash Arrays?
此行为在Parameter Expansion下定义:
如果参数是'@',则结果是从偏移量开始的长度位置参数。相对于大于最大位置参数的 1 采用负偏移量,因此 -1 的偏移量计算为最后一个位置参数。如果长度计算为小于零的数字,则为扩展错误。
我目前使用两种解决方法:
calvin@rose:~ unset A[-1]; echo ${A[@]:2} # This works, but I lose data
version 4.4.12(1)-release
calvin@rose:~ echo ${A[@]:2: ${#A[@]}-3 } # This works, but it gets messy fast
version 4.4.12(1)-release
有没有更好的办法?蟒蛇的A[2:-1]
孩子们在取笑我。