Sim, uma cadeia nula nesse contexto é uma cadeia de comprimento 0 que não contém nenhum byte. Em bash :
var=
var=''
var=""
var=$''
var=$""
var=$(true) # or any command that outputs nothing or only newline
# characters
var='true'
var=${null_or_unset_var}
var=''""$''$""$(true)"'true'"
Mas também em bash , como um efeito colateral de bash (ao contrário de zsh ) não suportando bytes NUL em suas variáveis (já que usa strings C delimitadas por NUL internamente):
var=$'var=
var=''
var=""
var=$''
var=$""
var=$(true) # or any command that outputs nothing or only newline
# characters
var='true'
var=${null_or_unset_var}
var=''""$''$""$(true)"'true'"
'
var=$'\u0000'
var=$'\c@'
var=$'\x00'
var=$'var=$'%pre%'
var=$'\u0000'
var=$'\c@'
var=$'\x00'
var=$'%pre%%pre%%pre%%pre%%pre%'
%pre%%pre%%pre%%pre%'
Em todos esses casos, $var será definido, mas não conterá nada (a string nula). echo "${#var}" produzirá 0 , [ -z "$var" ] retornará true e printf %s "$var" não produzirá nada.
Após unset var (mas cuidado com o bug / má qualidade de bash , mksh e yash onde unset pode revelar uma versão de $var de um escopo externo em vez de desatá-lo se você fazendo isso de uma função chamada de outra função que tinha declarado a variável local ), $var não tem valor, nulo ou não.
No entanto, $var ainda se expande para nada (para a cadeia nula), a menos que a opção nounset esteja ativada. Existem outras diferenças entre variáveis não definidas e variáveis com um valor vazio:
-
${var?} dispara um erro quando $var não está definido
-
${var+x} expande para x se $var tiver qualquer valor (mesmo nulo)
-
${var-x} se expande para x se $var não estiver definido
-
[[ -v var ]] retorna falso se $var não estiver definido
- se a variável estiver marcada para
export , então var= será passado no ambiente de cada comando se estiver definido ou não for passado de outra forma.