threads / patch / 33604

patchcheck-non-portable-shell: Check for non portable grep usage

Subject: [PATCH] check-non-portable-shell: Check for non portable grep usage

## tl;dr

2 messages between Apr 25, 2013 and Apr 25, 2013. Diffs are folded; open one to read it.

replies: 1people: 2as markdown or json

Torsten Bögershausen· Apr 25, 2013, 18:48 UTC · lore

The make test-lint could check for some common non portable grep usage:

The + as a qualifier is not a "basic regular expression". Some grep understand \+, but in general egrep should be used.

The \t can not be used to find an ASCII TAB, neither can \s be used to find a whitespace

Signed-off-by: Torsten Bögershausen <tboegi@web.de>
---
 t/check-non-portable-shell.pl | 2 ++
 1 file changed, 2 insertions(+)
Show changes to t/check-non-portable-shell.pl +2 −0
diff --git a/t/check-non-portable-shell.pl b/t/check-non-portable-shell.pl
index ff87611..58f8e2c 100755
--- a/t/check-non-portable-shell.pl
+++ b/t/check-non-portable-shell.pl
@@ -16,6 +16,8 @@ sub err {
 
 while (<>) {
 	chomp;
+	/ e?grep\s+\"[^"]*\\([st])/ and err "grep \\$1 is not portable)";
+	/ [^e]grep.*\\\+/ and err 'grep with \+ is not portable (please use egrep)';
 	/^\s*sed\s+-i/ and err 'sed -i is not portable';
 	/^\s*echo\s+-(\S)\s+/ and err "echo -$1 is not portable (please use printf)";
 	/^\s*declare\s+/ and err 'arrays/declare not portable';
-- 
1.8.2.1.614.g66d7af5
Junio C Hamano· Apr 25, 2013, 20:44 UTC · re: Torsten Bögershausen · lore

Re: [PATCH] check-non-portable-shell: Check for non portable grep usage

Torsten Bögershausen <tboegi@web.de> writes:
Show 23 quoted lines
> The make test-lint could check for some common non portable
> grep usage:
>
> The + as a qualifier is not a "basic regular expression".
> Some grep understand \+, but in general egrep should be used.
>
> The \t can not be used to find an ASCII TAB, neither
> can \s be used to find a whitespace
>
> Signed-off-by: Torsten Bögershausen <tboegi@web.de>
> ---
>  t/check-non-portable-shell.pl | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/t/check-non-portable-shell.pl b/t/check-non-portable-shell.pl
> index ff87611..58f8e2c 100755
> --- a/t/check-non-portable-shell.pl
> +++ b/t/check-non-portable-shell.pl
> @@ -16,6 +16,8 @@ sub err {
>  
>  while (<>) {
>  	chomp;
> +	/ e?grep\s+\"[^"]*\\([st])/ and err "grep \\$1 is not portable)";

grep -e "foo\tbar" is exempt? Indenting with a single tab, immediately followed by "grep" or "egrep" without SP in front, is exempt?

> +	/ [^e]grep.*\\\+/ and err 'grep with \+ is not portable (please use egrep)';
Not even checking if the it is inside the pattern of grep?

As I said number of times, I do not think it is a workable approach to textually match patterns in a script that does not understand even the basic shell syntax.

>  	/^\s*sed\s+-i/ and err 'sed -i is not portable';
>  	/^\s*echo\s+-(\S)\s+/ and err "echo -$1 is not portable (please use printf)";
>  	/^\s*declare\s+/ and err 'arrays/declare not portable';

← back to recent threads