hush: support $_NUMBERS variable names
This commit is contained in:
parent
f173607520
commit
d498131168
17
shell/hush.c
17
shell/hush.c
@ -587,7 +587,7 @@ static int glob_needed(const char *s)
|
|||||||
|
|
||||||
static int is_assignment(const char *s)
|
static int is_assignment(const char *s)
|
||||||
{
|
{
|
||||||
if (!s || !isalpha(*s))
|
if (!s || !(isalpha(*s) || *s == '_'))
|
||||||
return 0;
|
return 0;
|
||||||
s++;
|
s++;
|
||||||
while (isalnum(*s) || *s == '_')
|
while (isalnum(*s) || *s == '_')
|
||||||
@ -3529,22 +3529,24 @@ static int handle_dollar(o_string *dest, struct in_str *input)
|
|||||||
|
|
||||||
debug_printf_parse("handle_dollar entered: ch='%c'\n", ch);
|
debug_printf_parse("handle_dollar entered: ch='%c'\n", ch);
|
||||||
if (isalpha(ch)) {
|
if (isalpha(ch)) {
|
||||||
|
i_getch(input);
|
||||||
|
make_var:
|
||||||
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
||||||
while (1) {
|
while (1) {
|
||||||
debug_printf_parse(": '%c'\n", ch);
|
debug_printf_parse(": '%c'\n", ch);
|
||||||
i_getch(input);
|
|
||||||
o_addchr(dest, ch | quote_mask);
|
o_addchr(dest, ch | quote_mask);
|
||||||
quote_mask = 0;
|
quote_mask = 0;
|
||||||
ch = i_peek(input);
|
ch = i_peek(input);
|
||||||
if (!isalnum(ch) && ch != '_')
|
if (!isalnum(ch) && ch != '_')
|
||||||
break;
|
break;
|
||||||
|
i_getch(input);
|
||||||
}
|
}
|
||||||
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
||||||
} else if (isdigit(ch)) {
|
} else if (isdigit(ch)) {
|
||||||
make_one_char_var:
|
make_one_char_var:
|
||||||
|
i_getch(input);
|
||||||
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
||||||
debug_printf_parse(": '%c'\n", ch);
|
debug_printf_parse(": '%c'\n", ch);
|
||||||
i_getch(input);
|
|
||||||
o_addchr(dest, ch | quote_mask);
|
o_addchr(dest, ch | quote_mask);
|
||||||
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
o_addchr(dest, SPECIAL_VAR_SYMBOL);
|
||||||
} else switch (ch) {
|
} else switch (ch) {
|
||||||
@ -3586,8 +3588,15 @@ static int handle_dollar(o_string *dest, struct in_str *input)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
case '-':
|
|
||||||
case '_':
|
case '_':
|
||||||
|
i_getch(input);
|
||||||
|
ch = i_peek(input);
|
||||||
|
if (isalnum(ch)) { /* it's $_name or $_123 */
|
||||||
|
ch = '_';
|
||||||
|
goto make_var;
|
||||||
|
}
|
||||||
|
/* else: it's $_ */
|
||||||
|
case '-':
|
||||||
/* still unhandled, but should be eventually */
|
/* still unhandled, but should be eventually */
|
||||||
bb_error_msg("unhandled syntax: $%c", ch);
|
bb_error_msg("unhandled syntax: $%c", ch);
|
||||||
return 1;
|
return 1;
|
||||||
|
2
shell/hush_test/hush-vars/var2.right
Normal file
2
shell/hush_test/hush-vars/var2.right
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
http://busybox.net
|
||||||
|
http://busybox.net_abc
|
4
shell/hush_test/hush-vars/var2.tests
Executable file
4
shell/hush_test/hush-vars/var2.tests
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
_1=http://busybox.net
|
||||||
|
|
||||||
|
echo $_1
|
||||||
|
echo ${_1}_abc
|
Loading…
x
Reference in New Issue
Block a user