aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-02-09 23:18:02 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2023-02-09 23:18:02 +0100
commit69e3e0267601b502ed38bbb5f4e77ed2f128d540 (patch)
tree649ca2375972ee3ab6727e749171b81b37c3a9bd
parentaee076a26e4909c49baa4420b7bc4412d9ab6b5a (diff)
change var call to $[var]
-rw-r--r--smash/env.c15
-rw-r--r--smash/main.c2
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);
}