除了程序根据调用方式改变其行为外,我发现argv[0]
在打印程序的用法方面很有用,例如:
printf("Usage: %s [arguments]\n", argv[0]);
这将导致用法消息始终使用被调用的名称。如果重命名该程序,则其用法消息也会随之更改。它甚至包括调用它的路径名:
# cat foo.c
#include <stdio.h>
int main(int argc, char **argv) { printf("Usage: %s [arguments]\n", argv[0]); }
# gcc -Wall -o foo foo.c
# mv foo /usr/bin
# cd /usr/bin
# ln -s foo bar
# foo
Usage: foo [arguments]
# bar
Usage: bar [arguments]
# ./foo
Usage: ./foo [arguments]
# /usr/bin/foo
Usage: /usr/bin/foo [arguments]
这是一个很好的接触,特别是对于可能在各处存在的小型专用工具/脚本。
这在GNU工具中似乎也很常见ls
,例如:
% ls --qq
ls: unrecognized option '--qq'
Try 'ls --help' for more information.
% /bin/ls --qq
/bin/ls: unrecognized option '--qq'
Try '/bin/ls --help' for more information.