Bash set: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 18: Line 18:


  set: --: invalid option
  set: --: invalid option
==Difference between - and -- ==


==List Separator==
==List Separator==

Revision as of 18:32, 14 May 2019

External

Internal

set and Positional Parameters

arg="a b c"
set - ${arg}

assigns "a", "b", "c" to positional parameters $1, $2 and $3. '-' that follows the builtin signals the end of options and causes all remaining arguments to be assigned to the positional parameters. This prevents arguments that start with "--..." to interfere with set function. If "-" is not specified, and the first of the space-separated arguments contains '--', set will try to interpret that sequence of characters and will produce:

set: --: invalid option

Difference between - and --

List Separator

The default list separator is space. That can be changed by setting the value of the IFS variable before executing set.

Example:

arg="a,b,c"
IFS=","
set ${arg}

will identically assign "a", "b", "c" to positional parameters $1, $2 and $3.

Note you must set IFS back to whitespace after setting it to something else, so the basic shell function work as expected. This is done as shown here: restoring the default IFS value.

For more details about IFS see:

IFS

-x

After expanding each simple command and for, case and select commands, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. Useful in debugging.

+x

Prevents commands from being echoed at stdout. It is useful to start a script with set +x in case sensitive credentials are specified in commands.