Armazenar espaço em branco em uma variável de script shell [duplicado]

4

Eu preciso armazenar um número específico de espaços em uma variável.

Eu tentei isso:

i=0
result=""
space() {
    n=$1
    i=0
    while [[ "$i" != $n ]]
    do
        result="$result "
        ((i+=1))
    done
}

f="first"
s="last"
space 5

echo $f$result$s

O resultado é "firstlast", mas eu esperava 5 caracteres de espaço entre "first" e "last".

Como posso fazer isso corretamente?

    
por Vasu 02.09.2014 / 14:48

1 resposta

7

Use doublequotes ( " ) no comando echo :

echo "$f$result$s"

Isso ocorre porque o echo interpreta as variáveis como argumentos, com vários argumentos echo imprime todos eles com um espaço entre eles.

Veja isso como um exemplo:

user@host:~$ echo this is     a      test
this is a test
user@host:~$ echo "this is     a      test"
this is     a      test

No primeiro, há 4 argumentos:

execve("/bin/echo", ["echo", "this", "is", "a", "test"], [/* 21 vars */]) = 0

no segundo, é apenas um:

execve("/bin/echo", ["echo", "this is     a      test"], [/* 21 vars */]) = 0
    
por 02.09.2014 / 14:57