抠击不以防万一



我试图找出一种理智的方法,在案例中执行 NOT 子句。我这样做的原因是为了遇到案例时转码,也就是如果我点击了 avi,没有理由再次将其变成 avi,我可以只需将其移开(这是我案例底部的范围应该做的)。无论如何,我有一些我写出的原型代码给出了我正在尝试做的事情的要点。

#!/bin/bash
for i in $(seq 1 3); do 
    echo "trying: $i"
    case $i in
        ! 1)    echo "1" ;;     # echo 1 if we aren't 1
        ! 2)    echo "2" ;;     # echo 2 if we aren't 2
        ! 3)    echo "3" ;;     # echo 3 if we aren't 3
        [1-3]*) echo "! $i" ;;  # echo 1-3 if we are 1-3
    esac
    echo -e "n"
done

预期结果将是这样的

2 3 ! 1
1 3 ! 2
1 2 ! 3

感谢帮助,谢谢。

这与

只执行第一场比赛的case的设计相反。如果你想在多个匹配项上执行(在你的设计中3想要12上执行的东西),那么case是错误的结构。使用多个if块。

[[ $i = 1 ]] || echo "1"
[[ $i = 2 ]] || echo "2"
[[ $i = 3 ]] || echo "3"
[[ $i = [1-3]* ]] && echo "! $i"

由于 case 仅执行第一个匹配项,因此只有一个"不匹配"处理程序才有意义;这就是*)失败的用途。

您可以使用 extglob 扩展来执行此操作。

$ shopt -s extglob
$ case foo in !(bar)) echo hi;; esac
hi
$ case foo in !(foo)) echo hi;; esac
$

相关内容

  • 没有找到相关文章

最新更新