Positional arguments are passed as-is after the command name. Order matters.
cat file1.txt file2.txt
Options are named arguments and come in two forms:
-
Short: One-letter options are preceeded by a
-with values placed after (separated by a space).git commit -m "Fix" -
Long: Multi-letter options are preceeded by a
--with values placed after (separated by a=or a space).git commit --message="Fix"=git commit --message "Fix"
Note: Spaces aren't required after options, but are encouranged for readability, because
git commit -m"Fix"looks cramped.
Flags don't take a value and can be long or short.
git commit --dry-run -v
When using multiple short flags, you can combine them into one.
ls -a -g -h = ls -agh
The order of options/flags does not matter.
ls -a -g = ls -g -a
However, some commands require all options/flags to come before positional arguments.
FAILS: ls my-dir -a
WORKS: ls -a my-dir
Thankfully, most modern commands are agnostic.
git add a.js -v = git add -v a.js
I prefer to put positional arguments before options/flags when possible, as I find it easier to read.
Quotes are only required for strings that contain special characters (e.g. spaces).
FAILS: git commit -m Fix thing
WORKS: git commit -m "Fix thing"
WORKS: git commit -m Fix
Note: When writing npm scripts, prefer double quotes
"to single'for better cross-compatability with Windows.
Many modern commands use a command-subcommand structure, like git. In the following example, git is the root command, and commit is the subcommand.
git commit -m "Hi"
