Eu tenho o seguinte script:
#!/bin/bash
function consoleWriteLine() {
echo $* >&2
}
consoleWriteLine " indented by 4 spaces"
Quando o executo, recebo a seguinte saída:
$ ./test.sh
indented by 4 spaces
Para onde foram meus 4 espaços? E como os recupero?
consoleWriteLine
. Na segunda vezecho
, o espaço em branco precisa ser preservado novamente por aspas adicionais. Eu nunca imaginaria que você pode colocar aspas$*
.$*
, a variante$@
foi criada especificamente para expandir em palavras separadas quando citada:"$@"
pode haver vários argumentos,"$*"
é sempre apenas um.echo
é um dos poucos comandos em que não faz diferença.Eu mesmo tive esse problema,
Conforme este blog, você precisa alterar o IFS, pois, por padrão, ele contém espaços em branco e, por isso, vê "xxx yyy zzzz" como três strings com espaço em branco entre eles.
IFS='\n'
antes do comando irá corrigi-lo e desabilitar o IFS para remover a alteração
unset IFS
fonte