Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 575397
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T13:56:10+00:00 2026-05-13T13:56:10+00:00

In particular, why is that sometimes the options to some commands are preceded by

  • 0

In particular, why is that sometimes the options to some commands are preceded by a + sign and sometimes by a - sign?

for example:

sort -f
sort -nr
sort +4n
sort +3nr
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T13:56:10+00:00Added an answer on May 13, 2026 at 1:56 pm

    These days, the POSIX standard using getopt() (aka getopt(3)) is widely used as a standard notation, but in the early days, people were experimenting. On some machines, the sort command no longer supports the + notation. However, various commands (notably ar and tar) accept controls without any prefix character – and dd (alluded to by Alok in a comment) uses another convention altogether.

    The GNU convention of using ‘--‘ for long options (supported by getopt_long(3)) was changed from using ‘+‘. Of course, the X11 software uses a single dash before multi-character options. So, the whole thing is a collection of historic relics as people experimented with how best to handle it.

    POSIX documents the Utility Conventions that it works to, except where historical precedent is stronger.


    What styles of option handling are there?

    [At one time, SO 367309 contained the following material as my answer. It was originally asked 2008-12-15 02:02 by FerranB, but was subsequently closed and deleted.]

    How many different types of options do you recognize? I can think of
    many, including:

    • Single-letter options preceded by single dash, groupable when there is
      no argument, argument can be attached to option letter or in next
      argument (many, many Unix commands; most POSIX commands).
    • Single-letter options preceded by single dash, grouping not allowed,
      arguments must be attached (RCS).
    • Single-letter options preceded by single dash, grouping not allowed,
      arguments must be separate (pre-POSIX SCCS, IIRC).
    • Multi-letter options preceded by single dash, arguments may be
      attached or in next argument (X11 programs; also Java and many programs on Mac OS X with a NeXTSTEP heritage).
    • Multi-letter options preceded by single dash, may be abbreviated
      (Atria Clearcase).
    • Multi-letter options preceded by single plus (obsolete).
    • Multi-letter options preceded by double dash; arguments may follow ‘=’
      or be separate (GNU utilities).
    • Options without prefix/suffix, some names have abbreviations or are
      implied, arguments must be separate. (AmigaOS
      Shell
      )

    For options taking an optional argument, sometimes the argument must be attached (co -p1.3 rcsfile.c),
    sometimes it must follow an ‘=’ sign. POSIX doesn’t support optional
    arguments meaningfully (the POSIX getopt() only allows them for the last
    option on the command line).

    All sensible option systems use an option consisting of double-dash
    (‘--‘) alone to mean “end of options” — the following arguments are
    “non-option arguments” (usually file names; POSIX calls them ‘operands’)
    even if they start with a
    dash. (I regard supporting this notation as an imperative. Be aware that if the -- is preceded by an option requiring an argument, the -- will be treated as the argument to the option, not as the ‘end of options’ marker.)

    Many but not all programs accept single dash as a file name to mean
    standard input (usually) or standard output (occasionally). Sometimes,
    as with GNU ‘tar‘, both can be used in a single command line:

    ... | tar -cf - -F - | ...
    

    The first solo dash means ‘write to stdout’; the second means ‘read file
    names from stdin’.

    Some programs use other conventions — that is, options not preceded by a
    dash. Many of these are from the oldest days of Unix. For example,
    ‘tar’ and ‘ar’ both accept options without a dash, so:

    tar cvzf /tmp/somefile.tgz some/directory
    

    The dd command uses opt=value exclusively:

    dd if=/some/file of=/another/file bs=16k count=200
    

    Some programs allow you to interleave options and other arguments
    completely; the C compiler, make and the GNU utilities run without
    POSIXLY_CORRECT in the environment are examples. Many programs expect
    the options to precede the other arguments.

    Note that git and other VCS commands often use a hybrid system:

    git commit -m 'This is why it was committed'
    

    There is a sub-command as one of the arguments. Often, there will be optional ‘global’ options that can be specified between the command and the sub-command. There are examples of this in POSIX; the sccs command is in this category; you can argue that some of the other commands that run other commands are also in this category: nice and xargs spring to mind from POSIX; sudo is a non-POSIX example, as are svn and cvs.


    I don’t have strong preferences between the different systems. When
    there are few enough options, then single letters with mnemonic value
    are convenient. GNU supports this, but recommends backing it up with
    multi-letter options preceded by a double-dash.

    There are some things I do object to. One of the worst is the same
    option letter being used with different meanings depending on what other
    option letters have preceded it. In my book, that’s a no-no, but I know
    of software where it is done.

    Another objectionable behaviour is inconsistency in style of handling
    arguments (especially for a single program, but also within a suite of
    programs). Either require attached arguments or require detached
    arguments (or allow either), but do not have some options requiring an
    attached argument and others requiring a detached argument. And be
    consistent about whether ‘=‘ may be used to separate the option and
    the argument.

    As with many, many (software-related) things — consistency is more
    important than the individual decisions. Using tools that automate
    and standardize the argument processing helps with consistency.


    Whatever you do, please, read the TAOUP’s Command-Line Options and
    consider Standards for Command Line Interfaces. (Added by J F
    Sebastian — thanks; I agree.
    )

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am having trouble with some of my rubygems, in particular those that use
There is a particular registry value that my application sometimes creates during execution, i.e.
I'm working on a web scraper that sometimes needs to remember a particular page,
I have a particular application that needs to calculate something very specific, and while
Is there any particular reason that all data members in a class are private
I have a particular method that is occasionally crashing with an ArgumentException: Destination array
I have one particular FLA that is crashing every time I try to compile
Does blocking mode put that particular task in a Process Wait state, as i
I'm facing a particular issue that regards serial communication under win32. I'm communicating with
I'm having a particular issue that I was able to zero in on with

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.