Por que meu script omite o espaço em branco inicial na saída do console?

10

Eu tenho o seguinte script:

#!/bin/bash
function consoleWriteLine() {
  echo $* >&2
}

consoleWriteLine "    indented by 4 spaces"

Quando eu executo, recebo a seguinte saída:

$ ./test.sh
indented by 4 spaces

Para onde foram meus 4 espaços? E como faço para recuperá-los?

    
por Der Hochstapler 08.05.2015 / 12:25

2 respostas

22

Basta citar o echo em sua função:

function consoleWriteLine() {
  echo "$*" >&2
}

echo apenas nota vários argumentos separados por espaço e os imprime separados por um espaço único . Veja:

$ echo a b c
a b c
$ echo a b             c
a b c
$ echo "a b             c"
a b             c

No último exemplo, a string a b c é um argumento único e echo ed como é.

    
por 08.05.2015 / 13:00
4

Eu tive esse problema,

De acordo com This blog você precisa alterar o IFS, pois por padrão ele contém espaço em branco e, assim, vê "xxx yyy zzzz" como 3 strings com espaço em branco entre elas.

IFS='\n'

antes do comando irá consertá-lo e desmarque o IFS para remover a alteração

unset IFS

    
por 08.05.2015 / 12:31

Tags