printf で --help を使用できません

printf で --help を使用できません

ほとんどのプログラムは使用方法を出力し、「--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

printfbashもシェルに組み込まれています( )。

printf --help

デフォルトでは組み込み関数が常に外部関数よりも優先され、オプションprintfがないため、組み込み関数が実行され、エラーが発生します。--help

利用可能なすべてのprintf実行可能ファイルを検索するには:

type -a printf

実行可能ファイルが優先順位に従って表示されます。

help組み込みのページは次の方法で確認できますprintf

help printf

一方、外部を実行する場合はprintf、次のいずれかを実行します。

command printf
"printf"
'printf'
\printf

関連情報