Arrays 有没有更好的方法来获取从某个索引到结尾可能为空的数组切片/范围?
在鱼类阵列中,范围是一个基础,包括两个极端,这在可能需要零长度范围时会导致问题 特别是,我的情况是,我为自己的消费划分了第一个论点,我想把其余的论点转发出去——可能没有听指挥。如果这是Python,我可以执行以下操作:Arrays 有没有更好的方法来获取从某个索引到结尾可能为空的数组切片/范围?,arrays,slice,fish,Arrays,Slice,Fish,在鱼类阵列中,范围是一个基础,包括两个极端,这在可能需要零长度范围时会导致问题 特别是,我的情况是,我为自己的消费划分了第一个论点,我想把其余的论点转发出去——可能没有听指挥。如果这是Python,我可以执行以下操作: my_arg = sys.argv[1] other_args = sys.argv[2:] 然而,不幸的是,将此直接转换为fish在edge情况下不起作用;考虑 set -l my_arg $argv[1] set -l other_args $argv[2..-1] (我
my_arg = sys.argv[1]
other_args = sys.argv[2:]
然而,不幸的是,将此直接转换为fish在edge情况下不起作用;考虑
set -l my_arg $argv[1]
set -l other_args $argv[2..-1]
(我保留了相同的索引,因为在fish索引中,索引是基于1的,$argv
不包括sys.argv[0]
)
只要有足够的论据,这就行了;例如,如果我使用参数abcde
调用我的命令,我将得到$my_arg=a
和$other_args=bbcde
但是,如果我仅使用a
调用它,其他参数
也会意外地设置为a
。这是因为-1
实际上被扩展为(count$argv)
,因此上面的语句相当于
set -l other_args $argv[2..1]
这是一个从不存在的元素2到存在的元素1(包括)的反向范围,可以归结为普通的$argv[1]
为了避免这个问题,目前我正在使用这个可怕的解决方法
set -l other_args $argv[2..(expr (count $argv) + 1)]
它确保最后一个索引是最后一个索引,强制范围为“直”索引,尽管可能完全超出范围(根据需要返回空列表)
然而,我想知道:有没有更好的解决方案,我错过了
然而,我想知道:有没有更好的解决方案,我错过了
升级到3.0。这是2.7中的一个bug,已经修复了
现在的工作方式是,如果一个范围内只有一个指数为负,它将始终被解释为两个指数中的较大者,因此在负结束时,迭代将被迫进行
如果索引实际上没有变大,则不会生成任何元素,这正是您想要的。太好了!不幸的是,我不确定我是否能够在使用此脚本的所有计算机上升级到fish 3,因此目前我必须保留该解决方案,但知道它已被修复很好。另一种解决方案是在使用它之前检查argv是否有2个元素:
set-q argv[2];设置-l other_args$argv[2..-1]
呃,我认为情况更糟,因为你必须重复两次起始索引(因此它更容易失去同步)。我只保留expr
kludge。expr
kludge启动一个外部进程,并且只对fish>=2.7起作用(因为这是第一个允许无效索引的版本)。至少在2.2.0之前检查fish的工作情况。在这种特殊情况下启动外部进程不是什么大问题,但是欢迎使用一些以前的兼容性;我会采纳你的解决方案。