GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la substitution de commande Shell engloutit-elle un caractère de fin de ligne ?

Comme dans l'exemple suivant, et comme dans ma récente question Dans bash, où est passé le caractère de fin de ligne ? , je veux savoir "pourquoi" cela arrive

  x="$(echo -ne "anbn")" ; echo -n "$x" | xxd -p 
# Output is: 610a62 
# The trailing newline from the 'echo' command
#   has been "deleted" by Command Substitution

Je suppose qu'il doit y avoir des très raison importante pour une action du shell, à savoir la substitution de commande, pour supprimer réellement certaines données de la sortie de la commande qu'elle remplace…
mais je n'arrive pas à comprendre celle-ci, car elle semble être l'antithèse de ce qu'elle est supposé à faire.. c'est-à-dire. pour renvoyer la sortie d'une commande dans le processus de script… Retenir un caractère me semble bizarre, mais je suppose qu'il y a une raison raisonnable à cela… Je suis impatient de découvrir quelle est cette raison…

Réponse acceptée :

Parce que le shell n'était pas initialement destiné à être un langage de programmation complet.

Il est assez difficile de supprimer un n à la fin à partir d'une sortie de commande.
Cependant, à des fins d'affichage, presque toutes les commandes terminent leur sortie par n , donc… il doit y avoir un moyen simple de le supprimer lorsque vous souhaitez l'utiliser dans une autre commande. Suppression automatique avec le $() la construction a été la solution choisie.

Alors, peut-être accepterez-vous cette question comme réponse :

Pouvez-vous trouver un moyen simple de supprimer le n final si cela n'a pas été fait automatiquement dans la commande suivante ?

> echo The current date is "$(date)", have a good day!

Notez que les guillemets sont obligatoires pour éviter l'écrasement des espaces doubles qui peuvent apparaître dans les dates formatées.


Linux
  1. Comment affecter la sortie d'une commande à une variable Shell ?

  2. Stockage de la sortie de la commande dans la variable Shell ?

  3. Quelle est la différence entre obtenir la sortie de la commande en utilisant `command` et $ (commande) dans Shell ??

  4. Pourquoi un shell de connexion « sudo -i » casse-t-il un argument de chaîne de commande Here-doc ?

  5. Comment savoir si la sortie d'une commande ou d'un script shell est Stdout ou Stderr ?

Comment rediriger la sortie de la commande shell

Pourquoi Ctrl + V ne colle-t-il pas dans Bash (shell Linux) ?

Que signifie le symbole du tuyau linux | fais?

Rediriger la sortie de la commande dans docker

Pourquoi slabtop -o ne renvoie-t-il que les 23 premières lignes lorsque la commande est canalisée ?

Masquer la sortie d'une commande shell uniquement en cas de succès ?