В руководстве GNU для tar
приведен следующий пример, демонстрирующий важность порядка опций:
tar -cfv collection.tar blues folk jazz
В этом случае, поскольку v
ставится после f
], тогда архив tar будет называться «v», и tar
попытается добавить collection.tar
в архив, если он существует в текущем каталоге. Но если я опущу -
с самого начала, то команда работает так, как нам хотелось бы, несмотря на то, что v
ставится после f
. Почему?
Поскольку это - путь другая работа стилей опции, и они ведут себя по-другому.
Страница справочника указывает для UNIX или стиля короткой опции, тот, который снабжается префиксом единственного тире.
Любое число вариантов, не берущее аргументы, может кластеризироваться вместе после единственного тире, например,-vkp. Опции, которые берут аргументы (или обязательный или дополнительный), могут появиться в конце такого кластера, например,-vkpf a.tar.
Традиционный стиль параметра стиля, тот без тире:
В традиционном стиле первым аргументом является кластер букв опции, и все последующие аргументы предоставляют аргументы тем опциям, которые требуют их. Аргументы читаются в том же порядке как буквы опции. Любые слова командной строки, которые остаются после всех опций, были обработаны, рассматриваются как обязательные аргументы: файл или имена элемента архива.
Как Вы видите, стиль UNIX или короткой опции ожидает аргументы опциям непосредственно после опции.
Принимая во внимание, что традиционный стиль параметра стиля ожидает блок опций и подходящих аргументов опциям в правильном порядке.
Это ясно описано в man tar
:
Стили опции
Options to GNU tar can be given in three different styles. In traditional style, the first argument is a cluster of option letters and all subsequent arguments supply arguments to those options that require them. The arguments are read in the same order as the option letters. Any command line words that remain after all options has been processed are treated as non-optional arguments: file or archive member names. For example, the c option requires creating the archive, the v option requests the verbose operation, and the f option takes an argument that sets the name of the archive to operate upon. The following command, written in the traditional style, instructs tar to store all files from the directory /etc into the archive file etc.tar verbosely listing the files being archived: tar cfv a.tar /etc
Так в этом случае:
tar cfv collection.tar blues folk jazz
collection.tar
аргумент в пользу f
и blues folk jazz
быть остальной частью аргументов рассматривают как имена элемента архива.