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:
parent
3c7361f53a
commit
74e056bfc8
18
lash.c
18
lash.c
@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
|
|||||||
* wordexp can't do for us, namely $? and $! */
|
* wordexp can't do for us, namely $? and $! */
|
||||||
src = command;
|
src = command;
|
||||||
while((dst = strchr(src,'$')) != NULL){
|
while((dst = strchr(src,'$')) != NULL){
|
||||||
printf("dollar '%s'\n", dst);
|
|
||||||
var = NULL;
|
var = NULL;
|
||||||
switch(*(dst+1)) {
|
switch(*(dst+1)) {
|
||||||
case '?':
|
case '?':
|
||||||
@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
|
|||||||
} else {
|
} else {
|
||||||
/* Looks like an environment variable */
|
/* Looks like an environment variable */
|
||||||
char delim_hold;
|
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) {
|
if (src == NULL) {
|
||||||
src = dst+strlen(dst);
|
src = dst+dstlen;
|
||||||
}
|
}
|
||||||
delim_hold=*src;
|
delim_hold=*src;
|
||||||
*src='\0'; /* temporary */
|
*src='\0'; /* temporary */
|
||||||
var = getenv(dst + 1);
|
var = getenv(dst + num_skip_chars);
|
||||||
*src=delim_hold;
|
*src=delim_hold;
|
||||||
|
if (num_skip_chars==2) {
|
||||||
|
src++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (var == NULL) {
|
if (var == NULL) {
|
||||||
/* Seems we got an un-expandable variable. So delete it. */
|
/* Seems we got an un-expandable variable. So delete it. */
|
||||||
|
18
sh.c
18
sh.c
@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
|
|||||||
* wordexp can't do for us, namely $? and $! */
|
* wordexp can't do for us, namely $? and $! */
|
||||||
src = command;
|
src = command;
|
||||||
while((dst = strchr(src,'$')) != NULL){
|
while((dst = strchr(src,'$')) != NULL){
|
||||||
printf("dollar '%s'\n", dst);
|
|
||||||
var = NULL;
|
var = NULL;
|
||||||
switch(*(dst+1)) {
|
switch(*(dst+1)) {
|
||||||
case '?':
|
case '?':
|
||||||
@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
|
|||||||
} else {
|
} else {
|
||||||
/* Looks like an environment variable */
|
/* Looks like an environment variable */
|
||||||
char delim_hold;
|
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) {
|
if (src == NULL) {
|
||||||
src = dst+strlen(dst);
|
src = dst+dstlen;
|
||||||
}
|
}
|
||||||
delim_hold=*src;
|
delim_hold=*src;
|
||||||
*src='\0'; /* temporary */
|
*src='\0'; /* temporary */
|
||||||
var = getenv(dst + 1);
|
var = getenv(dst + num_skip_chars);
|
||||||
*src=delim_hold;
|
*src=delim_hold;
|
||||||
|
if (num_skip_chars==2) {
|
||||||
|
src++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (var == NULL) {
|
if (var == NULL) {
|
||||||
/* Seems we got an un-expandable variable. So delete it. */
|
/* Seems we got an un-expandable variable. So delete it. */
|
||||||
|
18
shell/lash.c
18
shell/lash.c
@ -1014,7 +1014,6 @@ static int expand_arguments(char *command)
|
|||||||
* wordexp can't do for us, namely $? and $! */
|
* wordexp can't do for us, namely $? and $! */
|
||||||
src = command;
|
src = command;
|
||||||
while((dst = strchr(src,'$')) != NULL){
|
while((dst = strchr(src,'$')) != NULL){
|
||||||
printf("dollar '%s'\n", dst);
|
|
||||||
var = NULL;
|
var = NULL;
|
||||||
switch(*(dst+1)) {
|
switch(*(dst+1)) {
|
||||||
case '?':
|
case '?':
|
||||||
@ -1057,14 +1056,25 @@ static int expand_arguments(char *command)
|
|||||||
} else {
|
} else {
|
||||||
/* Looks like an environment variable */
|
/* Looks like an environment variable */
|
||||||
char delim_hold;
|
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) {
|
if (src == NULL) {
|
||||||
src = dst+strlen(dst);
|
src = dst+dstlen;
|
||||||
}
|
}
|
||||||
delim_hold=*src;
|
delim_hold=*src;
|
||||||
*src='\0'; /* temporary */
|
*src='\0'; /* temporary */
|
||||||
var = getenv(dst + 1);
|
var = getenv(dst + num_skip_chars);
|
||||||
*src=delim_hold;
|
*src=delim_hold;
|
||||||
|
if (num_skip_chars==2) {
|
||||||
|
src++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (var == NULL) {
|
if (var == NULL) {
|
||||||
/* Seems we got an un-expandable variable. So delete it. */
|
/* Seems we got an un-expandable variable. So delete it. */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user