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" && pwdOLDPWD 次の設定が必要です。cdPWDコマンドの実行時に存在する場合。

答え2

チルダ拡張は標準化されているようです(参照IEEE規格1003.1、2004)がシェル拡張の一部ではありません cd

cd -また、サポートする必要があります(参照:IEEE規格1003.1、2005)。

答え3

はい、CD -POSIXによって義務付けられている:またtrueティルダ拡張 (ちょっとしたウェブ検索をするだけです;-))

cd組み込みプログラム(技術的には「プログラム」ではない)がPOSIXと互換性がある場合は、いくつかのオプションの解析も実行する必要があります。

ワイルドカードとシェル拡張の場合、私が理解しているように、ワイルドカードは特定の種類のパターンマッチングに関連するシェル拡張の特別なケースです。

関連情報