Coloque sua variável dentro de aspas duplas para evitar divisão de campo , que comeu seus espaços:
$ MYCUSTOMTAB=' '
$ echo "${MYCUSTOMTAB}blah blah"
blah blah
Eu atribuí um var como este:
MYCUSTOMTAB=' '
Mas usá-lo em eco:
echo $MYCUSTOMTAB"blah blah"
ou
echo -e $MYCUSTOMTAB"blah blah"
apenas retorna um espaço único e o restante da string:
blah blah
Como posso imprimir a seqüência completa intocada? Eu quero usá-lo para ter um recuo personalizado porque \t
é muito grande para o meu gosto.
Coloque sua variável dentro de aspas duplas para evitar divisão de campo , que comeu seus espaços:
$ MYCUSTOMTAB=' '
$ echo "${MYCUSTOMTAB}blah blah"
blah blah
Como sugerido em esta resposta , citar a variável é suficiente.
A razão pela qual o citar é necessário no seu caso é porque sem ele o bash aplica o operador split + glob na expansão de $MYCUSTOMTAB
. O valor padrão de $IFS
contém o caractere TAB, portanto, em echo -e $MYCUSTOMTAB"blah blah"
, $MYCUSTOMTAB
é simplesmente dividido em nada, então ele se torna o mesmo que se você tivesse escrito:
echo -e "blah blah"
(você provavelmente não quer -e
aqui btw).
Você também pode usar printf
em vez de echo
:
printf '%s\n' "$MYCUSTOMTAB"
printf '%s\n' "${MYCUSTOMTAB}blah blah"
Ou se você quiser que printf
faça o mesmo tipo de \n
, \t
expansões que echo -e
usam, use %b
em vez de %s
:
printf '%b\n' "${MYCUSTOMTAB}blah blah"
Para referência, leia Por que o printf é melhor que o eco?
Acho que você só precisa usar aspas duplas para sua variável
echo -e "$MYCUSTOMTAB"."blah blah"
Sei que sua pergunta está marcada como bash
, mas, de qualquer forma, para máxima portabilidade e confiabilidade, eu usaria:
printf "%sblah blah\n" "$MYCUSTOMTAB"
ou
someString="blah blah"
printf "%s%s\n" "$MYCUSTOMTAB" "$someString"
Tags bash shell shell-script