diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-02-09 23:18:02 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-02-09 23:18:02 +0100 |
| commit | 69e3e0267601b502ed38bbb5f4e77ed2f128d540 (patch) | |
| tree | 649ca2375972ee3ab6727e749171b81b37c3a9bd /smash | |
| parent | aee076a26e4909c49baa4420b7bc4412d9ab6b5a (diff) | |
change var call to $[var]
Diffstat (limited to 'smash')
| -rw-r--r-- | smash/env.c | 15 | ||||
| -rw-r--r-- | smash/main.c | 2 |
2 files changed, 11 insertions, 6 deletions
diff --git a/smash/env.c b/smash/env.c index 58285f0..69e5e68 100644 --- a/smash/env.c +++ b/smash/env.c @@ -31,14 +31,16 @@ char* new_line_and_replace_vars(const char *line, u64 n) char *replaced; for (int i = 0; i < n && line[i]; ++i) { - if (line[i] == '$') { + if (line[i] == '$' && line[i + 1] == '[') { clear_buf(var, 64); - ++i; - for (int j = 0; line[i] && line[i] != ' ';) { + i += 2; + + for (int j = 0; line[i] && line[i] != ']';) { var[j] = line[i]; ++j; ++i; } + ++i; if (cstr_length(var) == 0) { size++; @@ -56,15 +58,16 @@ char* new_line_and_replace_vars(const char *line, u64 n) for (int i = 0; i < size && line[line_pos]; ++i) { - if (line[line_pos] == '$') { + if (line[line_pos] == '$' && line[line_pos + 1] == '[') { clear_buf(var, 64); - ++line_pos; + line_pos += 2; - for (int j = 0; line[line_pos] && line[line_pos] != ' ';) { + for (int j = 0; line[line_pos] && line[line_pos] != ']';) { var[j] = line[line_pos]; ++j; ++line_pos; } + ++line_pos; if (cstr_length(var)) { const char *e = getenv(var); diff --git a/smash/main.c b/smash/main.c index 645f4eb..fe393e1 100644 --- a/smash/main.c +++ b/smash/main.c @@ -88,6 +88,8 @@ int main(int argc, char *argv[]) line = new_line_and_replace_vars(linebuf, BUFSIZ); line_length = cstr_length(line); + wff(STDERR_FD, "execute: %s\n", line); + if (line_length > 0) { exec(line); } |