Ao usar o comando echo $100
, obtive a saída 00, enquanto se eu der echo $d00
como comando, ele retorna uma linha vazia! Por quê? Existe uma maneira interna para o bash interpretar os dois de forma diferente?
Ao usar o comando echo $100
, obtive a saída 00, enquanto se eu der echo $d00
como comando, ele retorna uma linha vazia! Por quê? Existe uma maneira interna para o bash interpretar os dois de forma diferente?
Você está contrastando dois comandos
echo $100
saídas00
Isso ocorre porque no seu shell - mas não necessariamente em todos os shells - a variável
$1
é reservada (assim como outras variáveis numeradas de um único dígito de$2
-$9
). O shell analisa a string$100
como$1
seguida pelo literal00
. A variável$1
não contém nada, então apenas00
é a saída.Você não pode atribuir diretamente às variáveis numeradas, pois elas representam os argumentos passados para um comando. No entanto, se para fins de discussão mudarmos o
$100
para$10
podemos ver um exemplo aqui, onde$10
é visto como$1
(o primeiro argumento) e0
, mas${10}
é visto como o 10º argumento:echo $d00
dá uma linha vaziaO shell vê a variável não numérica
$d00
e a expande para seu valor. Você não definiu um valor, então não é nada. Oecho
comando resultante (sem argumentos) gera uma linha em branco.Você pode definir a variável e testar novamente:
Essa é uma coisa antiga do Bourne shell que o bash herdou: apenas $0-$9 podem ser usados sem colchetes. Use ${100} em vez disso.