execle()环境变量不工作

execle()环境变量不工作,c,linux,operating-system,C,Linux,Operating System,我开始学习操作系统,我尝试在C中使用execle()系统调用,我有一个DIR环境变量,我使用如下环境数组将其设置为/home char* path = "/bin/ls"; char* myargs[4] = {"ls", "-la", "/home", NULL}; char *const env[] = {"DIR=/home", NULL}; execle(path, myargs[0], myargs[1], "$DIR", NULL, env); 但是当我编译并运行它时,我会得到以下

我开始学习操作系统,我尝试在C中使用execle()系统调用,我有一个DIR环境变量,我使用如下环境数组将其设置为/home

char* path = "/bin/ls";
char* myargs[4] = {"ls", "-la", "/home", NULL};
char *const env[] = {"DIR=/home", NULL};
execle(path, myargs[0], myargs[1], "$DIR", NULL, env);
但是当我编译并运行它时,我会得到以下输出
ls:无法访问“$DIR”:没有这样的文件或目录

然而,这似乎工作得很好
execle(“/bin/bash”、“/bin/bash”、“-c”、“echo$DIR”、NULL、env)


我对execle调用的理解有什么错误吗?

函数族并不扩展环境变量本身,它们只是将环境传递给新程序进行
getenv
调用

电话

execle("/bin/bash", "/bin/bash", "-c", "echo $DIR", NULL, env);

之所以有效,是因为您调用的shell进行了
$DIR
环境变量的扩展,而不是由您的程序或
execle
函数进行扩展。

理解。谢谢你的快速回复。这就是像execle(“/bin/bash”、“/bin/bash”、“-c”、“ls-la$DIR”、NULL、env)这样的东西可以工作的原因。