Por que estou observando um comportamento diferente do eco?

5

Eu observei o comportamento abaixo do echo

#!/bin/bash

x=" hello"

echo $x
echo "$x"

Agora, quando executo o código acima, obtenho

ronnie@ronnie:~$ bash test.sh
hello
 hello
ronnie@ronnie:~$

Então, alguém pode me explicar porque whitespace no primeiro caso não está presente na saída e também me aponta para a documentação onde esse comportamento está definido.

    
por ronnie 16.10.2012 / 14:33

2 respostas

5

Não é o comportamento echo . É um comportamento bash. Quando você usa echo $x form o bash recebe o seguinte comando para processar (tratar como espaço):

echo␣␣hello

Em seguida, esse comando é tokenizado e o bash recebe dois tokens: echo e hello , portanto, a saída é apenas hello

Quando você usa o formulário echo "$x" , o bash tem o seguinte na entrada do tokenizer:

echo␣"␣hello"

assim, ele tem dois tokens echo e ␣hello , então a saída é diferente.

    
por 16.10.2012 / 14:39
1

O motivo pelo qual você vê saída diferente é porque a linha echo[1 space]Hello é sintaticamente igual codificar%. O espaço em branco é ignorado e a palavra "Hello" é tratada como o argumento para echo[5 spaces]Hello . A primeira linha, na sua forma mais simples, é a mesma que se você tivesse dito echo . Na segunda linha, você incluiu explicitamente um espaço principal como parte do argumento para echo "Hello" , com echo .

Na primeira linha, você está passando uma string de 5 caracteres para echo " Hello" , e na segunda linha você está passando uma string de 6 caracteres para echo .

Então, na verdade, o comportamento de echo é o mesmo em ambas as instâncias, é apenas a string passada para echo que muda.

    
por 16.10.2012 / 14:59