J'ai assigné un var comme ceci:
MYCUSTOMTAB=' '
Mais en l'utilisant en écho à la fois:
echo $MYCUSTOMTAB"blah blah"
ou
echo -e $MYCUSTOMTAB"blah blah"
renvoie juste un espace simple et le reste de la chaîne:
blah blah
Comment puis-je imprimer la chaîne complète intacte? Je veux l'utiliser pour avoir un retrait personnalisé parce que \t
est trop large à mon goût.
Mettez votre variable entre guillemets pour éviter fractionnement de champ , qui a mangé vos espaces:
$ MYCUSTOMTAB=' '
$ echo "${MYCUSTOMTAB}blah blah"
blah blah
Comme suggéré dans cette réponse la citation de la variable suffit.
La raison pour laquelle la citation est nécessaire dans votre cas est que sans elle bash applique l'opérateur split + glob à l'expansion de $MYCUSTOMTAB
. La valeur par défaut de $IFS
contient le caractère TAB, donc dans echo -e $MYCUSTOMTAB"blah blah"
, $MYCUSTOMTAB
est simplement divisé en rien, il devient le même que si vous aviez écrit:
echo -e "blah blah"
(vous ne voulez probablement pas -e
ici btw).
Vous pouvez également utiliser printf
au lieu de echo
:
printf '%s\n' "$MYCUSTOMTAB"
printf '%s\n' "${MYCUSTOMTAB}blah blah"
Ou si vous voulez que printf
fasse le même genre de \n
, \t
extensions qui echo -e
le fait, utilisez %b
au lieu de %s
:
printf '%b\n' "${MYCUSTOMTAB}blah blah"
Pour référence, lisez Pourquoi printf est-il meilleur que echo?
Je pense qu'il suffit d'utiliser des guillemets doubles pour votre variable
echo -e "$MYCUSTOMTAB"."blah blah"
Je sais que votre question est taguée bash
mais de toute façon, pour une portabilité et une fiabilité maximales, j'utiliserais:
printf "%sblah blah\n" "$MYCUSTOMTAB"
ou
someString="blah blah"
printf "%s%s\n" "$MYCUSTOMTAB" "$someString"