【发布时间】:2014-03-22 01:37:16
【问题描述】:
我正在尝试找出一种在案例中执行 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在设计上每次调用只执行一件事? -
...另外,
$(seq 1 3)不可移植——seq不是 POSIX 标准命令,许多平台都没有它。最好使用 C 风格的循环,即。for ((i=1; i<=3; i++)); do -
@CharlesDuffy 我没有,我认为它像 php 等更灵活
-
实际上,bash 的
case的工作方式是更常见的;它与 C 和 Java 的行为相同(除了缺少失败,这通常被认为是令人困惑的并且是错误/误读的常见来源)。 -
(更新到上面的评论:bash 的案例现在确实在 4.x 系列中可用;它的行为仍然与 C、Java 等一致。选择一个入口点)。