3.3.4 オプション形式の混在

各形式の規則を完全に守るかぎり、1つのtarコマンドの中で3つの形式を混在させられます4。古い形式と、どちらかの新しい形式を一緒に使えます。ただし、古い形式の規則どおり、古いオプションは最初の引数としてのみ指定しなければなりません。つまり、tarコマンド名と空白の直後に置きます。新しい形式のオプションを指定できるのは、古いオプションの引数をすべて読み取った後だけです。この規則を守らないと、新しい形式のオプションが、古いオプションの引数の値として誤って解釈されることがあります。

たとえば、次のコマンドはすべて完全に同じ意味です。オプション形式のさまざまな組合せと順序を示しています。

tar --create --file=archive.tar
tar --create -f archive.tar
tar --create -farchive.tar
tar --file=archive.tar --create
tar --file=archive.tar -c
tar -c --file=archive.tar
tar -c -f archive.tar
tar -c -farchive.tar
tar -cf archive.tar
tar -cfarchive.tar
tar -f archive.tar --create
tar -f archive.tar -c
tar -farchive.tar --create
tar -farchive.tar -c
tar c --file=archive.tar
tar c -f archive.tar
tar c -farchive.tar
tar cf archive.tar
tar f archive.tar --create
tar f archive.tar -c
tar fc archive.tar

一方、次のコマンドは、上の組と同じ意味にはなりません。

tar -f -c archive.tar
tar -fc archive.tar
tar -fcarchive.tar
tar -farchive.tarc
tar cfarchive.tar

これらの例は、ユーザーの意図とはまったく異なる意味になります。意図は、先の組にある、長いオプションを使った明確な例から判断できます。最初の4つは、アーカイブのファイル名として、順に-c、c、carchive.tar、archive.tarcを指定します。また、最初の2つは、値がarchive.tarである、オプション以外のname引数を1つ指定します。最後の例は、古い形式のオプション文字だけで構成され、cを2回繰り返しています。すべてが有効な文字とは限らず、たとえば.、h、iは意味を持ちません。引数の値もありません。


(4)

GNU tarのバージョン1.11.6より前には、一部の場合に古いオプションと長いオプションを混在させられないバグがありました。