在鱼阵范围内,是一个基础,包括两个极端,即:
unsurprisingly
,在可能需要零长度范围时会导致问题。
尤其是,我正处于这样一种情况下,我为自己的消费划分出第一个论点,我想把其余的论点转发出去——这可能不是什么!-命令。如果这是python,我可以做如下的事情:
my_arg = sys.argv[1]
other_args = sys.argv[2:]
然而,不幸的是,直接将此翻译为fish在边缘情况下不起作用;考虑
set -l my_arg $argv[1]
set -l other_args $argv[2..-1]
(我保持相同的索引,而在fish中,索引是基于1的,
$argv
不包括什么
sys.argv[0]
)
只要有足够的参数,这就可以正常工作;例如,如果我用参数调用我的命令
a b c d e
我会得到
$my_arg = a
和
$other_args = b c d e
.
但是,如果我用
a
,
other_args
会出人意料地
一
也。这是因为
-1
实际上扩展到某个影响
(count $argv)
,因此上面的语句等价于
set -l other_args $argv[2..1]
它是从不存在的元素2到存在的元素1的倒转范围,
包容的
最终变成了平原
$argv[1]
.
为了避免这个问题,目前我正在使用这个可怕的解决方法
set -l other_args $argv[2..(expr (count $argv) + 1)]
确保最后一个索引是
一次过去
最后一个,强制范围是一个“直”的范围,尽管可能完全超出范围(根据需要返回一个空列表)。
然而,我想知道:有没有一个更好的解决方案我错过了?