To create a tar file for a directory, the tar command with compress, verbose and file options can be typed thus:

$ tar -cvf my.tar my_directory/

But it also works to do it this way:

 $ tar cvf my.tar my_directory/

That is, without the dash (-) preceding the options. Why would you ever pass a dash (-) to the option list?


There are several different patterns for options that have been used historically in UNIX applications. Several old ones, like tar, use a positional scheme:

command options arguments

as for example tar uses

tar *something*f "file operated on" *"paths of files to manipulate"*

In a first attempt to avoid the confusion, tar and a few other programs with the old flags-arguments style allowed delimiting the flags with dashes, but most of us old guys simply ignored that.

Some other commands have a more complicated command line syntax, like dd(1) which uses flags, equal signs, pathnames, arguments and a partridge in a pear tree, all with wild abandon.

In BSD and later versions of unix, this had more or less converged to single-character flags marked with '-', but this began to present a couple of problems:

  • the flags could be hard to remember
  • sometimes you actually wanted to use a name with '-'
  • and especially with GNU tools, there began to be limitations imposed by the number of possible flags. So GNU tools added GNU long options like --output.

Then Sun decided that the extra '-' was redundant and started using long-style flags with single '-'s.

And that's how it came to be the mess it is now.

  • 9
    "and a partridge in a pear tree" Better than my dry attempt. You win. – dmckee --- ex-moderator kitten May 21 '11 at 23:48
  • 2
    nice historical context. – Milktrader May 22 '11 at 0:03
  • 2
    I notice that a lot of X programs (including, say, X, from Xorg), use long-style flags with a single -. Is that from Sun? – mattdm May 22 '11 at 2:29
  • 1
    What is the meanig of ‘partridge in a pear tree’? (Can I have any useful & easy-to-understand link?) – plhn Sep 2 '16 at 9:18
  • 1
    @plhn Idiom. A traditional English Christmas carol "The Twelve Days of Christmas" lists a whole bunch of extravagant gifts, ending with "a partridge in a pear tree". It suggests a long extravagant list. – Charlie Martin Sep 2 '16 at 15:45

You can give tar options in the standard unix manner tar -c -f foo -v -B file1 file2 file3 where you need the dash to differentiate between options and parameters or the file names at the end of the command line. Or you can put all the options together in the first argument, in which case the dash is optional.

Then there is ps, where you use the dashes if you're using the SysV-ish options, and leave them out if you're using BSD-ish options, just to make things more confusing.

And lets not even talk about find.


The dash is used in order to disambiguate between an option parameter names and values. I guess it's more of a standard convention.

  • 1
    I was going to add the best-practice tag because I thought it may come down to that. – Milktrader May 21 '11 at 23:30
  • 1
    @Milktrader, it's a difficult question when talking about best practices. Following standard conventions is indeed best practice, but whether you want to do it in your cases it's not clear. It will depend on your scenario. If you are hacking some quick command in the shell you probably wouldn't care much about it but if you are writing a library it is important to follow well established conventions because you don't have control of how this library is going to be used by clients. In this case you should cover all possible cases and disambiguating between option names and values is important. – Darin Dimitrov May 21 '11 at 23:33

With leading minus/dash sign (-) you need to keep the options in accurate order. Without minus order of your option can change.

For example:

# tar -xvf yourfile.tar
# tar vxf yourfile.tar
  • This answer is half right, but AFAIK it's only flags like f that take an argument whose order matters. See unix.stackexchange.com/a/239120/3169 – Mikel Jan 27 '19 at 6:05
  • Thanks upvoting. The mention of order is very helpful now I understand. – eigenfield Aug 12 '20 at 3:05

There are up to four conventions to use unix command line options:

  1. -o -p -t (dash before each option)
  2. -opt (dash before a set of options)
  3. opt (no dash before a set of options)
  4. --long-option (double dash before an option name)

For example:

$ tar -x -v -z -f package.tar.gz
$ tar -xvzf package.tar.gz
$ tar xvzf package.tar.gz
$ tar --extract --verbose --gzip --file package.tar.gz
  • 1
    Is that convention only applicable to tar? What about ls? ls lrt wont work but ls -lrt / ls -l -r -t will work. Why so? – Shashank Vyas Jan 15 '17 at 17:56
  • The four conventions should work for all commands. – jonasjacek Jan 16 '17 at 13:30
  • 3
    No they don't. The other day I tried rm rf <filename>, that also doesn't work. – Shashank Vyas Jan 30 '17 at 0:27

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.