6
votes

Pourquoi les backslashes disparaissent-ils lorsqu'ils courent à travers echo?

J'ai un code comme celui-ci, qui traite un fichier CSV: xxx

si le fichier CSV contient n'importe quel \ , lorsque j'exécute cette commande, le texte de sortie ne montre pas le \ .

Comment puis-je m'assurer que \ n'est pas supprimé?


2 commentaires

Essayez avec doubles citations: "$ (echo" $ line "| awk -f, '{improvement $ 2}')"


C'est une barre oblique inverse. Commencez par le bas.


3 Réponses :


1
votes

La page d'homme pour Bash a ceci à dire sur lire :

Le caractère de barre oblique inverse (\) peut être utilisé pour supprimer toute signification particulière pour la lecture du personnage suivant et pour la continuation de la ligne.


0 commentaires

16
votes

La raison de ce comportement est que le lue intégré utilise \ comme caractère d'échappement. Le drapeau -r désactive ce comportement.

Ainsi, cela devrait fonctionner: xxx

Vous devez également placer "... " autour des choses comme $ (...) et variables, comme xxx


2 commentaires

De plus, coupé -d, -f2 peut être utilisé à la place de la commande awk .


Votre suggestion lisez -r fonctionne également pour ma question opposée de la façon de supprimer le \ dans les boucles, alors merci!



0
votes

a trouvé une bonne référence ici :

Le \ (Backslash) est un caractère de devis dans la coquille. Cela signifie que sauf si le \ est utilisé avec un caractère d'échappement ou conçu dans des guillemets, par exemple "" ou '', la coque supprime les backslashes lorsque le la commande est élargie.


0 commentaires