[git commit] shell: add comments about [[, no code changes

Denys Vlasenko vda.linux at googlemail.com
Tue Apr 10 13:25:41 UTC 2018


commit: https://git.busybox.net/busybox/commit/?id=3632cb15f16a7596a68dccfd66a2ad9496bf9fd9
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 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)"


More information about the busybox-cvs mailing list