Aqui está uma série de casos onde echo $var
pode mostrar um valor diferente do que foi atribuído. Isso acontece independentemente de o valor atribuído ter "aspas duplas", 'aspas simples' ou não.
Como faço para que o shell defina minha variável corretamente?
Asteriscos
A saída esperada é /* Foobar is free software */
, mas em vez disso, recebo uma lista de nomes de arquivos:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Colchetes
O valor esperado é [a-z]
, mas às vezes recebo uma única letra!
$ var=[a-z]
$ echo $var
c
Feeds de linha (novas linhas)
O valor esperado é uma lista de linhas separadas, mas em vez disso, todos os valores estão em uma linha!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
Múltiplos espaços
Eu esperava um cabeçalho de tabela cuidadosamente alinhado, mas em vez disso, vários espaços ou desaparecem ou são reduzidos em um!
$ var=" title | count"
$ echo $var
title | count
Abas
Eu esperava dois valores separados por tabulação, mas em vez disso, recebo dois valores separados por espaço!
$ var=$'key\tvalue'
$ echo $var
key value
var=$(cat file)
está bom, masecho "$var"
é necessário.