コマンドラインでオプションの引数を指定する時に、半角スペース
と=
を利用する違いについて気になったので調べました。
調査結果
オプションの引数が省略できる場合だと半角スペース
が、オプション引数を省略した形かコマンドの引数か曖昧なので=
の指定が必要。
詳細内容
コマンドラインアプリケーションごとに違いはありますので grep
を基準にします。
まずファイルを作成します。
1 | cat > test.txt |
man grep をすると、–after-context=
num でnum行分を一致した行以降も表示しれくれるとなっています。
1 | -A num, --after-context=num |
1 | ~/Desktop ❯❯❯ grep test test.txt --after-context=3 |
1 | ~/Desktop ❯❯❯ grep test test.txt --after-context 3 |
–after-context=
num 、–after-contextnum のどちらでも受け付けてくれます。
man grep をすると、–colour=
never で一致した箇所の色付けを消してくれるとなっています。[when]になっているのでオプションの引数は省略できます。
1 | --colour=[when, --color=[when]] |
1 | ~/Desktop ❯❯❯ grep test test.txt --colour=never |
1 | ~/Desktop ❯❯❯ grep test test.txt --colour never |
1 | ~/Desktop ❯❯❯ grep test --colour test.txt |
–colour=
never は受け付けてくれますが、–colournever はneverがオプションの引数とは認識されずに検索対象のファイル名と認識されました。
確かにオプションの引数が省略できる場合だとそれが、オプションの引数かコマンドの引数か曖昧なので=
の指定が必要なことは納得できますね。
参考url
http://docopt.org/ : -o --option
の項目
https://qiita.com/rubytomato@github/items/2ee2fd4127eadc1f1193
https://qiita.com/aosho235/items/0f2b73d08eb645c05208