我不希望它是可修改的。也就是说,我不希望它启用类似的东西ARGS=("${ARGS[@]}")
,而只是简化类似的东西myarray=("${ARGS[@]/--unneeded-argument/}")
。
请注意,该--unneeded-argument
示例并不意味着删除参数是我问的原因。这是我多年来一直在思考的问题,但我从未得到明确的答案。
我不希望它是可修改的。也就是说,我不希望它启用类似的东西ARGS=("${ARGS[@]}")
,而只是简化类似的东西myarray=("${ARGS[@]/--unneeded-argument/}")
。
请注意,该--unneeded-argument
示例并不意味着删除参数是我问的原因。这是我多年来一直在思考的问题,但我从未得到明确的答案。
没有对应于
$@
.但是,您可以
@
在涉及数组的许多场景中使用(但不像您在评论${@[@]}
中询问的那样-已经是扩展):$@
@
然而,在最后一步中,结果可能并不完全符合您的要求——数组仍然有三个元素,其中一个是空的,因为替换是单独应用于所有数组元素的。
"$@"
对位置参数的"${foo[@]}"
作用与对数组变量的作用相同foo
。就像斯蒂芬说的那样,您可以@
在带大括号的扩展中使用,例如切片符号"${@:1:2}"
与"$1" "$2"
. (留下第二个数字会扩展至列表的其余部分,例如"${@:2}"
扩展至"$2"
以及之后的所有位置参数。)这符合命名变量,这里,特殊参数的“名称”是
@
,$
前面的只是触发扩展。请注意,大括号对于普通扩展是可选的(内部没有索引或字符串操作)。So"${@}"
与 相同"$@"
,您甚至可以写出"${@:1}"
相同的效果,因为索引@
从 1 开始,而不是 0。但是您不能使用
${@[@]}
, 或${@[1]}
. 它们分别是$@
和$1
。(从某种意义上说,$@
已经像${args[@]}
,所以你不能进一步索引它。)这也意味着如果你想索引到位置参数,你需要使用切片扩展,例如${@:i:1}
获取位置的元素我。但是,请注意,数组上的字符串操作扩展或
@
单独应用于所有元素。例如这里,oo
从foo
和中删除oo
,但仍然有@
left 的第三个元素,它只是空的:如果您想实际删除元素,则必须执行其他操作,例如循环值并删除您不想要的值。在命名数组的帮助下,这可能比尝试在
$@
. 说,像这样:或者这个问题的任何(更好的)答案:How to remove a positional parameter from $@