Gitはあなたがユーザーの観点からそうgit status
、git add
、などを行うことができますので、さまざまなコマンドを持っているように見える、git commit
はコマンドgit
の呼び出しのようですcommit
が最初の引数です。argc/argv
を実行しているときは、引数がダッシュで始まるか、その他の形式である必要があるというルールはまったくありません。
Gitの興味深い点は、それも拡張性があることです。あなたのパスのどこかに、git-hello
というスクリプトを作成すると、コマンドラインでgit hello
で呼び出すことができるので、 "本当の" Gitコマンドと見分けがつきません。
実際には、git-commit
,git-status
という別個のプログラムがあり、正しい推測であると推測できます。 man git-commit
のようなことができるので、man
ページを閲覧するときは注目に値する。 Gitは実際にそのようなスクリプトが置かれている実行パスを持っており、git --exec-path
を実行することで見つけ出すことができます。私のシステムでは、それは/usr/lib/git-core
であり、Gitには別々のスクリプトとシンボリックリンクがたくさんあります。
だから、Gitは実際には引数の扱いに関してほとんどのプログラムとはかなり違っています。他の標準ユーティリティがソースでコマンドライン引数をどのように扱っているかを見ることができます。例えば、GNUの実装ではthis is the source for cat
です。 main
に行くと、引数処理はgetopt_long
関数を介して行われ、これはgetopt
described in GNU docsとともに、glibc
の一部です。
'argparse'は、コマンドライン引数を解析するためのPython標準ライブラリで、このタイプの引数をサブコマンドと呼びます。 – chepner