ほとんどのプログラムは使用方法を出力し、「--help」で終了します。しかし、以下では動作しませんprintf
:
$ printf --help
bash: printf: --: invalid option
printf: usage: printf [-v var] format [arguments]
man 1 printf
言う:
概要
プリントフォーマット [引数]...
プリントオプション
説明
FORMAT に従って ARGUMENT を印刷するか、OPTION に従って実行します。
- ヘルプこのヘルプを表示して終了する
また、coreutils ソースコード:
/* We directly parse options, rather than use parse_long_options, in
order to avoid accepting abbreviations. */
if (argc == 2)
{
if (STREQ (argv[1], "--help"))
usage (EXIT_SUCCESS);
if (STREQ (argv[1], "--version"))
{
version_etc (stdout, PROGRAM_NAME, PACKAGE_NAME, Version, AUTHORS,
(char *) NULL);
return EXIT_SUCCESS;
}
}
なぜできないのでしょうかprintf --help
?
答え1
には 2 つの種類がありますprintf
。coreutils によって提供されるものと、シェル組み込みとして Bash によって提供されるものです。
$ type printf
printf is a shell builtin
$ /usr/bin/printf --help
Usage: /usr/bin/printf FORMAT [ARGUMENT]...
or: /usr/bin/printf OPTION
Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:
...
Bash の組み込みに関するヘルプを取得するには、help
代わりに次のコマンドを使用します。
$ help printf
printf: printf [-v var] format [arguments]
Formats and prints ARGUMENTS under control of the FORMAT.
...
答え2
使用できる printf には、シェル組み込みと実行可能の 2 種類があります。シェル組み込みについては、 で説明されていますman bash
。 はサポートされていません--help
。ただし、 を使用してそれに関する情報を取得することはできますhelp printf
。
man 1 printf
記述されており/usr/bin/printf
、実際にサポートされています--help
:
$ /usr/bin/printf --help
Usage: /usr/bin/printf FORMAT [ARGUMENT]...
or: /usr/bin/printf OPTION
Print ARGUMENT(s) according to FORMAT, or execute according to OPTION:
--help display this help and exit
--version output version information and exit
FORMAT controls the output as in C printf. Interpreted sequences are:
\" double quote
\\ backslash
\a alert (BEL)
\b backspace
\c produce no further output
\e escape
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\NNN byte with octal value NNN (1 to 3 digits)
\xHH byte with hexadecimal value HH (1 to 2 digits)
\uHHHH Unicode (ISO/IEC 10646) character with hex value HHHH (4 digits)
\UHHHHHHHH Unicode character with hex value HHHHHHHH (8 digits)
%% a single %
%b ARGUMENT as a string with '\' escapes interpreted,
except that octal escapes are of the form \0 or \0NNN
and all C format specifications ending with one of diouxXfeEgGcs, with
ARGUMENTs converted to proper type first. Variable widths are handled.
NOTE: your shell may have its own version of printf, which usually supersedes
the version described here. Please refer to your shell's documentation
for details about the options it supports.
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/printf>
or available locally via: info '(coreutils) printf invocation'
答え3
printf
bash
もシェルに組み込まれています( )。
printf --help
デフォルトでは組み込み関数が常に外部関数よりも優先され、オプションprintf
がないため、組み込み関数が実行され、エラーが発生します。--help
利用可能なすべてのprintf
実行可能ファイルを検索するには:
type -a printf
実行可能ファイルが優先順位に従って表示されます。
help
組み込みのページは次の方法で確認できますprintf
。
help printf
一方、外部を実行する場合はprintf
、次のいずれかを実行します。
command printf
"printf"
'printf'
\printf