僕は、このコマンドを見て、どういう構造になっているかよくわかりませんでした。
$ hoge -v -lv foo -- -l bar
普段、何気なく使っているCLIコマンドですが --
などが出てくると、よくわからなくなってしまう時があります・・・。
なので、コマンドを整理してみましょう。
argument (引数)
引数はコマンド名を含めた、コマンドラインに与えられた文字列全体の配列です。
配列の最初にあるのが、コマンド名ということですね。
コマンドラインに与えられたコマンド名もオプションも、パラメータも全て、引数に含まれます。
$ ls -la /tmp /var/tmp
arg0 = ls
arg1 = -la
arg2 = /tmp
arg3 = /var/tmp
option (オプション)
オプションは コマンドの挙動を変えるために与えられるものですね。
-h
のようなものは short と呼ばれ
--help
のようなものは long と呼ばれます。
$ ls -la --help /tmp /var/tmp
option1 = -l
option2 = -a
option3 = --help
parameter (パラメータ)
パラメータはコマンド、もしくはオプションに情報を与えるものです。
例えば、-o file
の場合 file
は -o
オプションにとってのパラメータです。
また、cat hoge.txt
の場合は hoge.txt
は cat
のパラメータですね。
そして、曲者の--
ダブルダッシュですが
これはオプションのように解釈されてしまうパラメータを渡すために使われます。
--
で区切った後の引数はオプションではなく、パラメータとして扱われます。
$ ls -l -- -a
option1 = -l
parameter1 = -a
参考