From 3632cb15f16a7596a68dccfd66a2ad9496bf9fd9 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 10 Apr 2018 15:25:41 +0200 Subject: [PATCH] shell: add comments about [[, no code changes Signed-off-by: Denys Vlasenko --- coreutils/test.c | 4 ++++ shell/ash.c | 15 ++++++++++++++- shell/hush.c | 12 ++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/coreutils/test.c b/coreutils/test.c index 824ce3b5a..ddb66ddce 100644 --- a/coreutils/test.c +++ b/coreutils/test.c @@ -313,6 +313,9 @@ static const struct operator_t ops_table[] = { { /* "-L" */ FILSYM , UNOP }, { /* "-S" */ FILSOCK , UNOP }, { /* "=" */ STREQ , BINOP }, + /* "==" is bashism, http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html + * lists only "=" as comparison operator. + */ { /* "==" */ STREQ , BINOP }, { /* "!=" */ STRNE , BINOP }, { /* "<" */ STRLT , BINOP }, @@ -357,6 +360,7 @@ static const char ops_texts[] ALIGN1 = "-L" "\0" "-S" "\0" "=" "\0" + /* "==" is bashism */ "==" "\0" "!=" "\0" "<" "\0" diff --git a/shell/ash.c b/shell/ash.c index 45c747dbc..713219b6e 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -197,7 +197,20 @@ #define IF_BASH_PATTERN_SUBST IF_ASH_BASH_COMPAT #define BASH_SUBSTR ENABLE_ASH_BASH_COMPAT #define IF_BASH_SUBSTR IF_ASH_BASH_COMPAT -/* [[ EXPR ]] */ +/* BASH_TEST2: [[ EXPR ]] + * Status of [[ support: + * We replace && and || with -a and -o + * TODO: + * singleword+noglob expansion: + * v='a b'; [[ $v = 'a b' ]]; echo 0:$? + * [[ /bin/* ]]; echo 0:$? + * -a/-o are not AND/OR ops! (they are just strings) + * quoting needs to be considered (-f is an operator, "-f" and ""-f are not; etc) + * = is glob match operator, not equality operator: STR = GLOB + * (in GLOB, quoting is significant on char-by-char basis: a*cd"*") + * == same as = + * add =~ regex match operator: STR =~ REGEX + */ #define BASH_TEST2 (ENABLE_ASH_BASH_COMPAT * ENABLE_ASH_TEST) #define BASH_SOURCE ENABLE_ASH_BASH_COMPAT #define BASH_PIPEFAIL ENABLE_ASH_BASH_COMPAT diff --git a/shell/hush.c b/shell/hush.c index 98ba96e0c..3afb70cb0 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -79,6 +79,18 @@ * Some builtins mandated by standards: * newgrp [GRP]: not a builtin in bash but a suid binary * which spawns a new shell with new group ID + * + * Status of [[ support: + * [[ args ]] are CMD_SINGLEWORD_NOGLOB: + * v='a b'; [[ $v = 'a b' ]]; echo 0:$? + * [[ /bin/* ]]; echo 0:$? + * TODO: + * &&/|| are AND/OR ops, -a/-o are not + * quoting needs to be considered (-f is an operator, "-f" and ""-f are not; etc) + * = is glob match operator, not equality operator: STR = GLOB + * (in GLOB, quoting is significant on char-by-char basis: a*cd"*") + * == same as = + * add =~ regex match operator: STR =~ REGEX */ //config:config HUSH //config: bool "hush (64 kb)"