shell: add comments about [[, no code changes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2018-04-10 15:25:41 +02:00
parent 4709df0f15
commit 3632cb15f1
3 changed files with 30 additions and 1 deletions

View File

@ -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"

View File

@ -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

View File

@ -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)"