Em
echo Variable "$var" is not initialised.
Você está passando 5 argumentos para echo (6, se contar echo ), echo os produzirá separados por um caractere de espaço terminado com uma nova linha.
Em:
echo "Variable $var is not initialised."
Você está passando 2 argumentos, dos quais o primeiro já tem o echo .
Neste caso particular e na maioria dos casos, isso será funcionalmente equivalente.
O segundo significa menos trabalho para o shell analisar o comando e armazená-lo em argumentos antes de executar echo e menos trabalho para echo passar por seus argumentos.
É improvável que isso faça uma diferença muito significativa. Em meus testes, vejo uma pequena diferença com algumas combinações de echo / shell como bash com sua integração, mas quase nenhuma em outras.
Outras razões pelas quais você pode querer passar um argumento em vez de vários:
- Se você quiser mais do que um espaço entre os argumentos:
echo a bproduziriaa b, você precisaria deecho 'a b'para a saídaa b. - Em coisas como
echo "$opt" is an invalid option, com algumas implementaçõesechocomoechoincorporadas debash, que não funcionariam comopt=-e(ou-Eou-neE...)echo "$opt is an invalid option"seria OK. - Em
echo foo bar, você está passando 2 argumentos de 3 bytes de comprimento cada, ou seja, 2 ponteiros (8 bytes cada em sistemas de 64 bits) e 6 bytes (22 bytes no total em sistemas de 64 bits). Embora seja um ponteiro e 7 bytes paraecho 'foo bar'(15 bytes no total). Ao chamar o executávelechoexterno com uma lista grande de argumentos, isso pode fazer com que você atinja o limite do tamanho dos argumentos mais rapidamente (embora muitos sistemas também tenham um limite no tamanho máximo de um único argumento).
Em qualquer caso aqui, para dados arbitrários (como $var cujo conteúdo não sabemos (embora no contexto aqui possamos derivar que contém apenas alnums e sublinhados)), você deseja usar printf , não echo :
printf '%s\n' "Variable $var is not initialised."
Ou:
printf 'Variable %s is not initialised.' "$var"
E, nesse caso, ao lado do formato, tem que ser um único argumento passado para printf .