POSIX compliance issues with case statements

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Unless I'm misinterpreting the specification, it seems like dash doesn't
handle pattern matching in case statements correctly. The following
sample demonstrates the issue:

#!/bin/sh -eu
while read -r line
do
	case "$line" in
		[:space:]*:)
			echo "a"
			;;
		*:)
			echo "b"
			;;
		*)
			echo "c"
			;;
	esac
done <<EOF
libgit2 policy:
  0.27.8-r0:
	lib/apk/db/installed
	https://mirror.sr.ht/alpine/sr.ht/
EOF

The expected output is b a c c, but the output in practice is b b c c.
Quoting the spec:

> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_04_05
> 
> ...case shall execute the compound-list corresponding to the first one of
> several patterns (see Pattern Matching Notation)...
> 
> http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13
> 
> ...patterns matching a single character shall match a single character:
> ordinary characters, special pattern characters, and pattern bracket
> expressions...
> 
> ...an open bracket... shall introduce a pattern bracket expression... as in
> XBD RE Bracket Expression...
> 
> http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_03_05
> 
> ...The following character class expressions shall be supported in all
> locales:
> 
> [:space:]

Am I misinterpreting the spec or is this indeed a problem with dash? In
addition to this issue, the following example cause a parsing error:

	[ \t])

Both problems can be reproduced with bash.



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux