[PATCH 4/5] test: hush: Add test for command substitution
Sean Anderson
seanga2 at gmail.com
Mon Mar 1 00:47:17 CET 2021
This adds a basic test for command substitution. A more advanced test
currently fails, and is left commented-out for now. A basic example of the
difference is that in bash
$ a=b; echo a=$(echo $a)
b
but in hush
=> a=b; echo a=$(echo $a)
a=
This is because command substitution takes place during parsing, before any
of the rest of the command has been executed.
Signed-off-by: Sean Anderson <seanga2 at gmail.com>
---
test/cmd/test_echo.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/test/cmd/test_echo.c b/test/cmd/test_echo.c
index 13e1fb7c82..f3d44d840d 100644
--- a/test/cmd/test_echo.c
+++ b/test/cmd/test_echo.c
@@ -31,13 +31,21 @@ static struct test_data echo_data[] = {
* j, q, x are among the least frequent letters in English.
* Hence no collision for the variable name jQx is expected.
*/
- {"setenv jQx X; echo \"a)\" ${jQx} 'b)' '${jQx}' c) ${jQx}; setenv jQx",
+ {"setenv jQx X; echo \"a)\" ${jQx} 'b)' '${jQx}' c\\) ${jQx}; setenv jQx",
"a) X b) ${jQx} c) X"},
/* Test shell variable assignments without substitutions */
{"foo=bar echo baz", "baz"},
/* Test handling of shell variables. */
{"setenv jQx; for jQx in 1 2 3; do echo -n \"${jQx}, \"; done; echo;",
"1, 2, 3, "},
+ /* Test basic command substitution */
+ {"jQx=3 echo 1 $(echo 2) $jQx", "1 2 3"},
+ /*
+ * The following test fails because the subshell is evaluated before
+ * anything else, but the jQx2 assignment should happen beforehand
+ */
+ //{"jQx2=2; echo 1 $(echo ${jQx2}) 3",
+ //"1 2 3"},
};
static int lib_test_hush_echo(struct unit_test_state *uts)
--
2.30.1
More information about the U-Boot
mailing list