0

我要在 linux 中编写一个简单的 shell,它可以实现包括环境变量在内的各种东西。我尝试使用打印这些变量,getenv但我遇到了一些问题。即使用户键入了正确的变量,例如,也getenv总是返回。这是我的代码NULL$HOME

int i = 0;
if(strcmp(cmdArgv[i], "echo") == 0){
                char *variable;
                for(i = 1; cmdArgv[i] != NULL; i++){
                    variable = getenv(cmdArgv[i]);
                    if(!variable){
                        puts("not a variable");
                           printf("%s ", cmdArgv[i]);
                        }else{
                            puts("a variable");
                            printf("%s ", variable);
                        }
                   }
                   printf("\n");
                   exit(0);
               }

它不进入else条件。例如,如果用户键入echo ls $HOME. 这个输入被解析成cmdArgvwhich is a char **。然后我的输出是

not a variable
ls
not a variable
$HOME

但是$HOME是一个变量,所以我的实现可能getenv不正确。关于似乎是什么问题的任何想法?谢谢。

4

1 回答 1

7

变量被称为HOME,而不是$HOME。(后者是你的 shell扩展变量的语法。)

于 2011-11-27T23:33:22.223 回答