コマンドラインインターフェイスのオプションについて

コマンドラインでオプションの引数を指定する時に、半角スペース=を利用する違いについて気になったので調べました。

調査結果

オプションの引数が省略できる場合だと半角スペースが、オプション引数を省略した形かコマンドの引数か曖昧なので=の指定が必要。

詳細内容

コマンドラインアプリケーションごとに違いはありますので grep を基準にします。

まずファイルを作成します。

1
2
3
4
5
6
7
cat > test.txt
test
hoge
poyo
poke
111
control+d

man grep をすると、–after-context=num でnum行分を一致した行以降も表示しれくれるとなっています。

1
2
-A num, --after-context=num
Print num lines of trailing context after each match. See also the -B and -C options.
1
2
3
4
5
~/Desktop ❯❯❯ grep test test.txt --after-context=3
test
hoge
poyo
poke
1
2
3
4
5
~/Desktop ❯❯❯ grep test test.txt --after-context 3
test
hoge
poyo
poke

–after-context=num 、–after-contextnum のどちらでも受け付けてくれます。

man grep をすると、–colour=never で一致した箇所の色付けを消してくれるとなっています。[when]になっているのでオプションの引数は省略できます。

1
2
3
--colour=[when, --color=[when]]
Mark up the matching text with the expression stored in GREP_COLOR environment variable. The possible
values of when can be `never', `always' or `auto'.
1
2
~/Desktop ❯❯❯ grep test test.txt --colour=never
test
1
2
3
~/Desktop ❯❯❯ grep test test.txt --colour never
test.txt:test
grep: never: No such file or directory
1
2
~/Desktop ❯❯❯ grep test --colour test.txt
test

–colour=never は受け付けてくれますが、–colournever はneverがオプションの引数とは認識されずに検索対象のファイル名と認識されました。
確かにオプションの引数が省略できる場合だとそれが、オプションの引数かコマンドの引数か曖昧なので=の指定が必要なことは納得できますね。

参考url

http://docopt.org/ : -o --option の項目
https://qiita.com/rubytomato@github/items/2ee2fd4127eadc1f1193
https://qiita.com/aosho235/items/0f2b73d08eb645c05208