BASH不是在案件中

ehi*_*ime 6 bash case

嘿伙计们,我正试图找出一个在案件中做一个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
Run Code Online (Sandbox Code Playgroud)

预期的结果将是这样的

2 3 ! 1
1 3 ! 2
1 2 ! 3
Run Code Online (Sandbox Code Playgroud)

非常感谢帮助,谢谢.

Cha*_*ffy 7

这与case仅执行第一场比赛的设计相反.如果你想在多个匹配执行(并在设计中,一些东西, 3想对双方执行12),然后case是错误的结构.使用多个if块.

[[ $i = 1 ]] || echo "1"
[[ $i = 2 ]] || echo "2"
[[ $i = 3 ]] || echo "3"
[[ $i = [1-3]* ]] && echo "! $i"
Run Code Online (Sandbox Code Playgroud)

因为case只执行第一次匹配,所以只有一个"did-not-match"处理程序才有意义; 这就是*)落空的目的.