CD 프로그램은 POSIX와 호환됩니까?

CD 프로그램은 POSIX와 호환됩니까?

와일드카드와 쉘 확장은 같은 것입니까? 나는 글을 쓰면서 C를 배우고 있어요맞춤형 주택POSIX도 배우고 있어요. 이제 홈 디렉토리를 의미하는 POSIX 준수 cd -여부가 궁금합니다 . ~모든 쉘이 이를 수행할 수 있는 것은 아니며 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

물결표 확장셸 명령 처리의 일부이며 확장된 경로를 인수로 cd처리 하지 않습니다.cd

POSIX요구 사항 cd -은 다음과 같습니다.cd "$OLDPWD" && pwd.OLDPWD 다음으로 설정해야 합니다.cdPWD명령을 실행할 때 존재하는 경우 .

답변2

물결표 확장은 표준화된 것으로 보입니다(참조IEEE 표준 1003.1, 2004)이지만 셸 확장의 일부가 아닌 cd.

cd -또한 지원되어야 합니다(참조:IEEE 표준 1003.1, 2005).

답변3

예,CD -POSIX에 의해 의무화됨: 또한 true틸다 확장 (약간의 웹 검색만 하면 됩니다 ;-))

cd내장 프로그램(기술적으로 "프로그램"이 아님)이 POSIX와 호환되기를 원하는 경우 일부 옵션 구문 분석도 수행해야 합니다.

와일드카드 및 셸 확장의 경우, 내가 이해하는 바에 따르면 와일드카드는 특정 유형의 패턴 일치와 관련된 셸 확장의 특별한 경우입니다.

관련 정보