ワイルドカードとシェル拡張は同じですか?私は書いて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
次の設定が必要です。cd
PWD
コマンドの実行時に存在する場合。
答え2
チルダ拡張は標準化されているようです(参照IEEE規格1003.1、2004)がシェル拡張の一部ではありません
cd
。
cd -
また、サポートする必要があります(参照:IEEE規格1003.1、2005)。