Em shells do tipo Bourne (se nos esquecermos de bugs 1 em algumas implementações antigas de alguns shells)
var=$otherVar
está bem. Você está atribuindo a uma variável escalar, então não pode haver glob + splitting aqui, então você não precisa escrever var="$otherVar"
(embora as citações não causem dano aqui).
Uma exceção é para:
var=$*
e:
var=$@
Você deve usar apenas var="$*"
. O comportamento de var=$@ var=$* var="$@"
varia entre os shells quando o primeiro caractere de $IFS
não é espaço.
Claro, em:
array=("$var")
Você precisa das aspas, caso contrário, os elementos da matriz receberiam o resultado da divisão + globbing de $var
.
Observe também que você precisa das aspas em:
export var="$otherVar"
com muitas shells (nelas, aqui, é um comando simples, então split + glob ocorre).
E em:
env var="$otherVar" cmd
Ou
awk -v var="$otherVar"...
Em caso de dúvida, use as aspas.
1 Algumas versões antigas do zsh
tiveram um problema com a barra invertida na frente de caracteres curinga quando em sh
emulação:
$ (a='\*' exec -a sh zsh-3.1.9 -c 'b=$a; printf "%s\n" "$b"')
*
$ (a='\*' exec -a sh zsh-3.1.9 -c 'b="$a"; printf "%s\n" "$b"')
\*
Isso foi corrigido há muito tempo.