diff options
author | Mike Frysinger <vapier@gentoo.org> | 2009-06-01 14:09:09 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2009-06-01 14:16:43 -0400 |
commit | dc3bc40578e0d9a4f4437d5b9018c1dd02900584 (patch) | |
tree | f6ac1edd6f84a81fdda2a84ac29d06a0181904d0 /shell | |
parent | ff64fb9e3100ff89446b54af3ef80cd86d4730f5 (diff) | |
download | busybox-dc3bc40578e0d9a4f4437d5b9018c1dd02900584.tar.gz |
hush: add support for special vars in braces
Some people like to use ${?} rather than $?, so make sure we support all
the special single char vars that use this form.
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 3 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/param_expand_indicate_error.right | 1 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/param_expand_indicate_error.tests | 2 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/var1.right | 4 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var1.tests | 4 | ||||
-rw-r--r-- | shell/hush_test/hush-vars/var3.right | 1 | ||||
-rwxr-xr-x | shell/hush_test/hush-vars/var3.tests | 2 |
7 files changed, 9 insertions, 8 deletions
diff --git a/shell/hush.c b/shell/hush.c index 7d0416796..b5cf86132 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -5303,6 +5303,9 @@ static int handle_dollar(o_string *as_string, all_digits = true; goto char_ok; } + /* They're being verbose and doing ${?} */ + if (i_peek(input) == '}' && strchr("$!?#*@_", ch)) + goto char_ok; } if (expansion < 2 diff --git a/shell/hush_test/hush-vars/param_expand_indicate_error.right b/shell/hush_test/hush-vars/param_expand_indicate_error.right index ec4908c35..590bb2001 100644 --- a/shell/hush_test/hush-vars/param_expand_indicate_error.right +++ b/shell/hush_test/hush-vars/param_expand_indicate_error.right @@ -1,5 +1,4 @@ hush: syntax error: unterminated ${name} -hush: syntax error: unterminated ${name} 0 0 _ diff --git a/shell/hush_test/hush-vars/param_expand_indicate_error.tests b/shell/hush_test/hush-vars/param_expand_indicate_error.tests index 1f94181a9..bccba3e1b 100755 --- a/shell/hush_test/hush-vars/param_expand_indicate_error.tests +++ b/shell/hush_test/hush-vars/param_expand_indicate_error.tests @@ -1,7 +1,7 @@ # do all of these in subshells since it's supposed to error out # first try some invalid patterns -"$THIS_SH" -c 'echo ${?}' +#"$THIS_SH" -c 'echo ${?}' -- this is valid as it's the same as $? "$THIS_SH" -c 'echo ${:?}' # then some funky ones diff --git a/shell/hush_test/hush-vars/var1.right b/shell/hush_test/hush-vars/var1.right index 14b2314d9..194e7dbe2 100644 --- a/shell/hush_test/hush-vars/var1.right +++ b/shell/hush_test/hush-vars/var1.right @@ -1,4 +1,4 @@ http://busybox.net http://busybox.net_abc -1 -1 +1 1 +1 1 diff --git a/shell/hush_test/hush-vars/var1.tests b/shell/hush_test/hush-vars/var1.tests index 0a63696c9..48a6782ba 100755 --- a/shell/hush_test/hush-vars/var1.tests +++ b/shell/hush_test/hush-vars/var1.tests @@ -4,6 +4,6 @@ echo $URL echo ${URL}_abc true -false; echo $? +false; echo $? ${?} true -{ false; echo $?; } +{ false; echo $? ${?}; } diff --git a/shell/hush_test/hush-vars/var3.right b/shell/hush_test/hush-vars/var3.right index e772aaada..5e28d2fab 100644 --- a/shell/hush_test/hush-vars/var3.right +++ b/shell/hush_test/hush-vars/var3.right @@ -1,3 +1,2 @@ hush: syntax error: unterminated ${name} hush: syntax error: unterminated ${name} -hush: syntax error: unterminated ${name} diff --git a/shell/hush_test/hush-vars/var3.tests b/shell/hush_test/hush-vars/var3.tests index e09f43317..aea36d62d 100755 --- a/shell/hush_test/hush-vars/var3.tests +++ b/shell/hush_test/hush-vars/var3.tests @@ -1,4 +1,4 @@ # reject invalid vars "$THIS_SH" -c 'echo ${1q}' "$THIS_SH" -c 'echo ${&}' -"$THIS_SH" -c 'echo ${$}' +#"$THIS_SH" -c 'echo ${$}' -- this is valid as it's the same as $$ |