BASH 万一

标签 bash case

我正在尝试找出一种在案例中使用 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/

相关文章:

Bash 退出不退出

linux - 更改登录 shell 时出现问题

mysql case 语句,有些有效,有些无效

mysql order by MIN() where NOT NULL

sql-server - 存储过程中的 SQL case 语句

MySQL 中在 where 内计数不同的情况

linux - Shell 脚本中 -n、-z、-x、-L、-d 等的含义是什么?

mysql - Bash中循环遍历mysql的结果集

linux - 哪个 bash 命令适合从文本文件中提取多个模式?

Zend 的 Mysql CASE 语句用法