通配符和 shell 扩展是一回事吗?我正在通过写一个来学习C定制外壳我也在学习 POSIX。现在我想知道是否是 POSIX 合规性cd -
让您返回,这~
意味着主目录?因为并非所有 shell 都可以做到这一点,而且我不知道 cd 命令是否需要最低限度的 POSIX 合规性。我使用的实现是
int do_cd(int argc, const char **argv) {
const char *path;
if (argc > 1) {
path = argv[1];
}
else {
path = getenv("HOME");
if (path == NULL) {
fprintf(stderr, "No HOME environment variable\n");
return 1;
}
}
if (chdir(path) < 0) {
perror(path);
return 1;
}
return 0;
}
答案1
波形符扩展是 shell 命令处理的一部分,而不是cd
.cd
将已经扩展的路径视为其参数。
POSIX要求cd -
等于cd "$OLDPWD" && pwd
。OLDPWD
必须由以下设置cd
如果PWD
在运行命令时存在。
答案2
波形符扩展似乎是标准化的(参见IEEE 标准 1003.1,2004 年),但是是 shell 扩展的一部分,而不是
cd
.
cd -
也必须得到支持(参见IEEE 标准 1003.1,2005)。