おでーぶでおでーぶ

いろいろ書く。いろいろ。

コマンドのマニュアル・サンプルで使う記法について

よくコマンドの実行例で以下のような記法を見ることがあると思う。

$ git add <file>...

これは man で使ってる記法を元にしてることが多い。ただ「コマンドのサンプル(マニュアル)はこう書け」という厳密な構文が存在するわけではなく、MicrosoftIBM始め、ある程度の共通項持った様々な亜種を定義している。

表現記法

ぱっと目に着くものを試しに書き下してみると、

用途 記法 その他備考
foo は変数 foo or <foo> or foo or FOO 斜体にならず、_foo_ と表示される端末もある(ミスなのかは知らない)
foo は literal foo これは太字
foo または bar foo|bar
foo が optional [foo]
-f foo-b をグルーピング(1つも選ばなくてもよい) [-f foo|-b] 任意用の角括弧はグルーピングにも使える
-f foo-b をグルーピング(最低でも1つ選ぶ必要がある) (-f foo|-b) or {-f foo|-b}
foo を繰り返し指定できる foo...
最低でも1つの foo が必要 foo foo...
複数の変数を指定する foo bar baz 上記繰り返しでは表現できない場合のみ
空白を含めた foo bar を1つの引数とする "foo bar" シェルのオプションパース仕様に依存しているところが強い

これらの表現は合成・入れ子が可能とはいえ、1行で書くには限界がある。そういう場合は複数行に分けることが多い。例えば下記のコマンドのような表記の場合、

$ foo bar ([-a] <baz> | -b)

2行に分解し、排他であることを明確に示す。

$ foo bar [-a] <baz>
$ foo bar -b

共通表現

厳密な構文が存在しないとは言っても、広く用いられている共通の表現がある。

用途 記法
foo は変数 foo or <foo> or foo or FOO
foo または bar foo|bar
foo が optional [foo]
-f foo-b をグルーピング(1つも選ばなくてもよい) [-f foo|-b]
-f foo-b をグルーピング(最低でも1つ選ぶ必要がある) (-f foo|-b) or {-f foo|-b}
foo を繰り返し指定できる foo...

<foo> を optional の意味で使ったり、[foo] を変数の意味でとして使ったり、そういうことをしている明記されたルールは見たことがない。*1

正直ここらへんの規則すら破ってるサンプル表記は本当にやめて欲しいな、と思ったりする。*2

$ foo [bar]

で、実は bar が必須とか。それでいて bar は実は変数だとか。普通に実行出来る気がしない。*3

語弊が少なそうだなって思う記法の組み合わせ

僕の思う最強の(ry みたいな。

用途 記法
foo は変数 FOO or <foo>
foo は literal foo
foo または bar foo|bar
foo が optional [foo]
-f foo-b をグルーピング(1つも選ばなくてもよい) [-f foo|-b]
-f foo-b をグルーピング(最低でも1つ選ぶ必要がある) (-f foo|-b)
foo を繰り返し指定できる foo...
  • 斜体や太字 -> 見づらい*4
  • {} -> 正規表現のせいか () の方がグルーピングっぽく、{} にグルーピング感を感じない*5

RFCとかで制定されて欲しい今日この頃。

参考

*1:個人の感想です

*2:個人の感想です

*3:というか出来なかった。この記事を書いてる理由はまさにこれで、サンプルを見ても全く分からずソースコードを読むことになった。

*4:個人の感想です

*5:個人の感想です