web-dev-qa-db-fra.com

Préserver le formatage lorsque la sortie de commande est envoyée à une variable?

J'ai un script Bash. Si j'exécute cette commande pour:

  1. grep pour certains modèles,
  2. transformer la sortie,
  3. trier la sortie
  4. dédoué la sortie

alors je reçois une trouvaille de grep par ligne dans le terminal

LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq

Cependant, si je le mettit dans une variable de sortie, le formatage est perdu (lors de l'écho à un fichier ou à l'écho à l'écran).

#!/usr/bin/env bash
output=$(LC_ALL=C grep -o --color -h -E -C 0 -r "$pattern" /pathto/Pre_N/ | tr -d '[:digit:]' | sort | uniq)
echo $output > $fn

Comment puis-je conserver la mise en forme de la sortie de cette commande une fois que je l'enregistre à une variable?

14
bernie2436

Utilisez des devis:

echo "$output" > $fn

la ligne d'écho est analysée par la coque (après une expansion variable) et tous les espaces caractères entre les paramètres sont réduits dans un espace simple. A l'exemple:

$ var1="toto
> titi
> tutu
> "

$ echo $var1
toto titi tutu

$ echo "$var1"
toto
titi
tutu
22