我正在尝试找出一种在案例中使用 NOT 子句的合理方法。我这样做的原因是 遇到情况时转码,也就是如果我打了一个 avi,没有理由再把它变成 avi,我可以 只需将它移开(这是我的案例底部的范围 应该 做的)。反正我有一些 proto 我写的那种代码给出了我正在尝试做的事情的要点。
#!/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
的内容将希望同时在 1
和 上执行2
),则 case
是错误的结构。使用多个 if
block 。
[[ $i = 1 ]] || echo "1"
[[ $i = 2 ]] || echo "2"
[[ $i = 3 ]] || echo "3"
[[ $i = [1-3]* ]] && echo "! $i"
因为 case 只执行第一个匹配,所以只有一个“did-not-match”处理程序才有意义;这就是 *)
fallthrough 的目的。
关于BASH 万一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21919182/