[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
case statement: wrong behaviour of the ";;&" operator
From: |
Norman Krebs |
Subject: |
case statement: wrong behaviour of the ";;&" operator |
Date: |
Sat, 26 Jan 2019 06:30:05 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 |
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.krebs@kohnos.net
------------------------------------------http://www.kohnos.net-----
- case statement: wrong behaviour of the ";;&" operator,
Norman Krebs <=