Соответствие POSIX программы cd?

Является ли globbing и расширение оболочки одним и тем же? Я изучаю C, создавая специальную оболочку, и я также изучаю POSIX. Теперь я задаюсь вопросом, соответствует ли соответствие POSIX тому, что cd - возвращает вас, и что ~ означает домашний каталог? Потому что не все оболочки могут это сделать, и я не знаю, требуется ли минимальное соответствие POSIX для команды cd. Реализация, которую я использую,

 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; } 

Расширение Tilde является частью обработки команд оболочки, а не частью cd . cd видит уже расширенный путь в качестве аргумента.

POSIX требует, чтобы cd - был эквивалентен cd "$OLDPWD" && pwd . OLDPWD должен быть установлен cd если PWD существует во время запуска команды.

Расширение Тильды, по-видимому, стандартизировано (см. IEEE Std 1003.1, 2004 ), но является частью расширения оболочки, а не cd .

cd - также должен поддерживаться (см. IEEE Std 1003.1,2005 ).

Да, cd – задан POSIX: и это расширение tilda (все, что требуется, это немного веб-поиска ;-))

Если вы хотите быть совместимым с POSIX, ваш встроенный cd (технически не «программа») также потребуется выполнить парсинг параметров.

Что касается globbing vs shell, то, как я его понимаю, globbing – это частный случай расширения оболочки, который включает в себя определенный тип соответствия шаблонов.