Configuration Information:
Machine: x86_64
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS: -g -O2 -Wno-parentheses -Wno-format-security
uname output: Linux hpxz 4.9.37 #1 SMP Sat Jul 15 08:39:05 CEST 2017 x86_64 
GNU/Linux
Machine Type: x86_64-pc-linux-gnu

Bash Version: 5.0
Patch Level: 2
Release Status: release

Description:

    "echo x" shouldn't be executed here, but it gets:

    case "1" in
        1) : ;;&
        2) : ;;
        *) echo x ;;
    esac

    Following the man page, the ';;&' operator should cause testing the _next_
    pattern: '2)' only and not _all_ following patterns.

    The bash manpage says:

    "
    case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
    ...
    If  the  ;; operator is used, no subsequent matches are attempted after
    the first pattern match.  Using ;& in place of ;; causes execution to 
continue with
    the list associated with the next set of patterns.  Using ;;& in place of 
;; causes
    the shell to test the next pattern list in the statement, if any, and  
execute  any
    associated  list  on  a  successful  match.
    "


Repeat-By:
    Use the ';;&' in a case statement which contains a second matching pattern 
list, p.e.:

    case "1" in
        1) : ;;&
        2) : ;;
        3) : ;;
        *1*) echo y ;;
        *)   echo x ;;
    esac

    will print 'y' - while '*1*)' is not the next pattern list after '1)'.


-- 
/Kind regards, Norman

--------------------------------------------------------------------
   Norman Krebs               +49 (0)5333 946930
   Nordweg 3                 +49 (0)160 90768856
   D-38173 Hachum/Evessen
   EMail:  norman.kr...@kohnos.net
------------------------------------------http://www.kohnos.net-----


Reply via email to