shell - 在 fish shell 中压缩 for 循环(循环多个列表)

标签 shell loops fish

我经常将临时循环直接写入命令行以运行一系列实验。它始终是一次性的,因此为它编写脚本文件是不必要的开销。

但是,通常我想压缩一堆参数,我想运行一个类似于以下的命令:

for arg1,arg2 in 256,lol 128,foo 32,bar
    ./bla --many-flags --name $arg2 --something $arg1
end

我可以用 string 在 fish 中实现类似但很脆弱的东西(或 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
对于常规的交互式使用来说不太令人满意,但我想我会活下来的。

关于shell - 在 fish shell 中压缩 for 循环(循环多个列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48073794/

相关文章:

perl - 如何用一些字符串替换 CSV 中的特定列?

linux - 通过 udev 规则触发的 shell 脚本打开 lxterminal 窗口

shell - fish shell : how to add a newline before existing prompt?

c - 使用 unix shell 测试系统的字节顺序

linux - 在 Linux 启动脚本中获取其他脚本

javascript - 附加 div 时,当超过 10 个时删除旧的附加 div

python - 具有嵌套循环和 if 条件的列表理解,以及新列表的成员资格

c++ - 检查一个元素是否存在于二维数组中,如果为真则返回

fish - 将 conda 添加到 fish 中的路径

linux - 有没有办法将环境变量设置为 x 小时