Skip to content
Joachim Ansorg edited this page Nov 12, 2021 · 2 revisions

To assign positional parameters, use set -- first second .. (or use [ ] to compare).

Problematic code:

if [ -z "$1" ]
then
  $1="help"
fi

or

if $1="help"
then
  echo "Usage: $0 filename"
fi

Correct code:

if [ -z "$1" ]
then
  set -- "help"
fi

or

if [ $1 = "help" ]
then
  echo "Usage: $0 filename"
fi

Rationale:

You have a command on the form $2=value.

If the goal is to assign a new value to the positional parameters, use the set builtin: set -- one two .. will cause $1 to be "one" and $2 to be "two".

If you instead want to compare the value, use [ ] and add spaces: [ "$1" = "foo" ]

Exceptions:

None

Related resources:

  • Help by adding links to BashFAQ, StackOverflow, man pages, POSIX, etc!

ShellCheck

Each individual ShellCheck warning has its own wiki page like S001. Use GitHub "Pages" feature above to find a specific one, or see Checks.

Clone this wiki locally