在 fish shell 中压缩 for 循环(循环多个列表)
Zipping for loop in fish shell (loop over multiple lists)
我经常将临时循环直接写入命令行以 运行 进行一系列实验。这总是一次性的事情,因此为其编写脚本文件是不必要的开销。
虽然,我经常想压缩一堆参数,我想 运行 一个有点像下面的命令:
for arg1,arg2 in 256,lol 128,foo 32,bar
./bla --many-flags --name $arg2 --something $arg1
end
我可以使用 string
(或旧版本中的 tr delim \n
)在鱼中实现类似但非常脆弱的效果,如下所示:
for exp in 256,lol 128,foo 32,bar
./bla --many-flags --name (string split ',' $exp)[2] --flag (string split ',' $exp)[1]
end
我想知道有没有人知道更好的方法,这些方法不需要每次使用参数时都使用繁琐的子命令(一个参数甚至可以多次使用),更糟糕的是,任意定界符会导致各种问题吗?
理想情况下,我什至可以像这样将它用作 let
:
for arg1,arg2 in 256,lol
./bla --many-flags --ame $arg2 --something $arg1
end
根据问题的评论,这是不支持的。最接近的解决方法似乎是:
for exp in 256,lol 128,foo 32,bar
echo $exp | read -d , arg1 arg2
./bla --many-flags --name $arg2 --flag $arg1
end
对于常规的交互使用来说不太令人满意,但我想我会挺过去的。
我经常将临时循环直接写入命令行以 运行 进行一系列实验。这总是一次性的事情,因此为其编写脚本文件是不必要的开销。
虽然,我经常想压缩一堆参数,我想 运行 一个有点像下面的命令:
for arg1,arg2 in 256,lol 128,foo 32,bar
./bla --many-flags --name $arg2 --something $arg1
end
我可以使用 string
(或旧版本中的 tr delim \n
)在鱼中实现类似但非常脆弱的效果,如下所示:
for exp in 256,lol 128,foo 32,bar
./bla --many-flags --name (string split ',' $exp)[2] --flag (string split ',' $exp)[1]
end
我想知道有没有人知道更好的方法,这些方法不需要每次使用参数时都使用繁琐的子命令(一个参数甚至可以多次使用),更糟糕的是,任意定界符会导致各种问题吗?
理想情况下,我什至可以像这样将它用作 let
:
for arg1,arg2 in 256,lol
./bla --many-flags --ame $arg2 --something $arg1
end
根据问题的评论,这是不支持的。最接近的解决方法似乎是:
for exp in 256,lol 128,foo 32,bar
echo $exp | read -d , arg1 arg2
./bla --many-flags --name $arg2 --flag $arg1
end
对于常规的交互使用来说不太令人满意,但我想我会挺过去的。