The first thing that the shell does it to split the line on unquoted spaces (metacharacters) into tokens. This is different than the word-splitting done after expansions in that the IFS value is not used. The characters used for initial token splitting are fixed as metacharacters. All this will make var contain Hello (sometimes for a brief moment):
var=Hello echo World # Space var=Hello;echo World # Semicolon var=Hello echo World # Tab var=Hello&echo World # Ampersand Also, for this initial token splitting, the right side of an assignment is considered quoted.
All this are equivalent:
var="Hello World" var='Hello World' var=Hello\ World Note that the only character that must be quoted is the white space. Even if IFS is modified.
Of course, inside double quotes several expansions are allowed:
var="~var=~"/" ; var=~/ tilde expansion (outside quotes) var="$PWD" ; var=$PWD parameter and variable expansion var="$(pwd)" ; var=$(pwd) command substitution var="$((2+3))" ; var=$((2+3)) arithmetic expansion var="!$" ; var=!$ history substitution All pairs above are equivalent (the same).
None of the pairs will work the same inside single quotes (or with some back-quotes), example:
var='$PWD' ; var=\$PWD Also, this are not equivalent:
var="( Hello World )" ; var=( Hello World ) The parenthesis trigger an array assignment
So, all this are equivalent:
var=hi var="hi" var='hi' var=\hi var=h\i var=\h\i taking into account the special conditions given previously.