ユーティリティのオペランドは、常にユーティリティのすべてのオプションの後に表示されるべきですか?

ユーティリティのオペランドは、常にユーティリティのすべてのオプションの後に表示されるべきですか?

POSIX と

utility_name[-a][-b][-c option_argument]
    [-d|-e][-f[option_argument]][operand...]

...最後のオプションとオプション引数の後に続く引数の名前は「オペランド」です。

これは、POSIX標準に従って、ユーティリティのオペランドが常にユーティリティのすべてのオプションの後に表示される必要があることを意味しますか?

一部のコマンドやユーティリティはルールに従わないのに対し、他のコマンドやユーティリティでエラーが発生するのはなぜですか?たとえば、

  1. マンページからls

    SYNOPSIS
           ls [OPTION]... [FILE]...
    

    それは[FILE]...今現われる[OPTION]...

    しかし、オペランドがオプションの前に表示される可能性があります。たとえば、次のよう ls . -aに動作します。ls -a .

  2. bash 組み込みの場合、readオペランドの後にオプションを指定するとエラーが発生します。

    $ read tt -u 5 5 < /tmp/tt
    bash: read: `-u': not a valid identifier 
    $ read -u 5  tt 5</tmp/tt 
    $ echo $tt 
    1 2 3 4 5
    

答え1

はい、プログラムの移植性を高めたい場合は可能です。

オプションがパラメータのどこにでも表示されるようにするGNU固有

いずれにせよ、常に--オプションの終わりをとして表現でき、その後のすべての項目は--オペランドとして扱われます。

答え2

タイトルの質問に答えてください。

オプションの後にオペランドを表示する必要がありますか?

はい。

彼らはいつもこんな感じですか?

いいえ。

プログラムがオプションとオペランド(通常は引数)を処理する方法は、完全にユーティリティ開発者によって異なります。一部の開発者はいくつかの一般的な規則に従い、他の開発者は他の一般的な規則に従います。最も一般的な2つの一般的なルールは、GNUルールとPOSIXルールです。

関連情報