Fixed a couple more cases. $FOO/bar ${FOO} and such now work

without wordexp.  Of course for stuff like ${1:-foo} you still
need wordexp for them to work.
 -Erik
This commit is contained in:
Eric Andersen 2001-03-09 20:34:46 +00:00
parent 3c7361f53a
commit 74e056bfc8
3 changed files with 42 additions and 12 deletions

18
lash.c
View File

@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
* wordexp can't do for us, namely $? and $! */
src = command;
while((dst = strchr(src,'$')) != NULL){
printf("dollar '%s'\n", dst);
var = NULL;
switch(*(dst+1)) {
case '?':
@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
} else {
/* Looks like an environment variable */
char delim_hold;
src=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.");
int num_skip_chars=1;
int dstlen = strlen(dst);
/* Is this a ${foo} type variable? */
if (dstlen >=2 && *(dst+1) == '{') {
src=strchr(dst+1, '}');
num_skip_chars=2;
} else {
src=strpbrk(dst+1, " \t~`!$^&*()=|\\[];\"'<>?./");
}
if (src == NULL) {
src = dst+strlen(dst);
src = dst+dstlen;
}
delim_hold=*src;
*src='\0'; /* temporary */
var = getenv(dst + 1);
var = getenv(dst + num_skip_chars);
*src=delim_hold;
if (num_skip_chars==2) {
src++;
}
}
if (var == NULL) {
/* Seems we got an un-expandable variable. So delete it. */

18
sh.c
View File

@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
* wordexp can't do for us, namely $? and $! */
src = command;
while((dst = strchr(src,'$')) != NULL){
printf("dollar '%s'\n", dst);
var = NULL;
switch(*(dst+1)) {
case '?':
@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
} else {
/* Looks like an environment variable */
char delim_hold;
src=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.");
int num_skip_chars=1;
int dstlen = strlen(dst);
/* Is this a ${foo} type variable? */
if (dstlen >=2 && *(dst+1) == '{') {
src=strchr(dst+1, '}');
num_skip_chars=2;
} else {
src=strpbrk(dst+1, " \t~`!$^&*()=|\\[];\"'<>?./");
}
if (src == NULL) {
src = dst+strlen(dst);
src = dst+dstlen;
}
delim_hold=*src;
*src='\0'; /* temporary */
var = getenv(dst + 1);
var = getenv(dst + num_skip_chars);
*src=delim_hold;
if (num_skip_chars==2) {
src++;
}
}
if (var == NULL) {
/* Seems we got an un-expandable variable. So delete it. */

View File

@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
* wordexp can't do for us, namely $? and $! */
src = command;
while((dst = strchr(src,'$')) != NULL){
printf("dollar '%s'\n", dst);
var = NULL;
switch(*(dst+1)) {
case '?':
@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
} else {
/* Looks like an environment variable */
char delim_hold;
src=strpbrk(dst+1, " \t~`!$^&*()=|\\{}[];\"'<>?.");
int num_skip_chars=1;
int dstlen = strlen(dst);
/* Is this a ${foo} type variable? */
if (dstlen >=2 && *(dst+1) == '{') {
src=strchr(dst+1, '}');
num_skip_chars=2;
} else {
src=strpbrk(dst+1, " \t~`!$^&*()=|\\[];\"'<>?./");
}
if (src == NULL) {
src = dst+strlen(dst);
src = dst+dstlen;
}
delim_hold=*src;
*src='\0'; /* temporary */
var = getenv(dst + 1);
var = getenv(dst + num_skip_chars);
*src=delim_hold;
if (num_skip_chars==2) {
src++;
}
}
if (var == NULL) {
/* Seems we got an un-expandable variable. So delete it. */