【问题标题】:How would "simply" loop over three lists without repetition in bash?如何“简单地”循环三个列表而不在bash中重复?
【发布时间】:2021-05-27 05:43:21
【问题描述】:

亲爱的,我有一个生成许多文本文件的代码,我遇到了一个问题,即代码由于重复而需要时间,所以,我如何“简单”地在 bash .sh 脚本中添加一个命令并排除重复值例如(0.45, 0.45,0.50) 被使用,但 (0.45,0.50,0.45) 和 (0.50,0.45,0.45) ... 被排除在外

i = 0

for VX1 in 0.45 0.50 0.55
 do

for VX2 in 0.45 0.50 0.55
 do

for VX3 in 0.45 0.50 0.55
 do
let "i++"

【问题讨论】:

  • (0.45, 0.45,0.50) 有重复值0.45,为什么要使用它?
  • @CharlesDuffy 这个问题是什么数组>?
  • @Barmar Ahh -- 我将 VX1、VX2 和 VX3 视为我们想要迭代的三个独立数组(它们恰好使用相同的样本数据)。如果没有这个假设......老实说,我在确定 OP 实际想要完成的事情时遇到了更多麻烦。
  • 能否请您发布一些完整的、可运行的代码示例,而不仅仅是一些部分 sn-p。
  • (0.45, 0.45,0.50)怎么被当成包含重复值?

标签: bash loops sh


【解决方案1】:

您可以在启动内部循环后立即检查值是否相等。使用continue 跳过迭代。

要针对两个值进行测试,您可以在 bash 中使用 extglob 模式。

#! /bin/bash
i=0
shopt -s extglob
for VX1 in 0.45 0.50 0.55 ; do
    for VX2 in 0.45 0.50 0.55 ; do
        if [[ "$VX2" == "$VX1" ]] ; then
            continue
        fi
        for VX3 in 0.45 0.50 0.55 ; do
            if [[ "$VX3" == @("$VX2"|"$VX1") ]] ; then
                continue
            fi
            let "i++"
        done
    done
done
echo $i

【讨论】:

  • 谢谢@choroba,你成就了我的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2015-12-05
  • 1970-01-01
  • 2014-01-07
  • 2019-10-28
  • 2018-10-10
相关资源
最近更新 更多