Bash set
External
- set man page http://linuxcommand.org/lc3_man_pages/seth.html
- https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
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 be interpreted as set arguments and 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
An indexed array can be used to initialize positional parameters too:
declare -a ARGS
ARGS=("a" "b" "c")
set - "${ARGS[@]{"
{{Warn|If
Difference between - and --
--
If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the args, even if some of them begin with a -.
-
Signal the end of options, cause all remaining args to be assigned to the positional parameters. The -x and -v options are turned off. If there are no args, the positional parameters remain unchanged.
Unset Positional Parameters
set --
Alternative:
shift $#
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:
-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.