GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi une seule barre oblique inversée s'affiche-t-elle lors de l'utilisation de guillemets ?

J'ai toujours pensé que bash traitait les barres obliques inverses de la même manière lorsqu'il était utilisé sans ou avec des guillemets doubles, mais je me trompais :

[[email protected] ~]$ echo "foo \ "
foo \
[[email protected] ~]$ echo foo \ # Space after \
foo

Je pensais donc que les barres obliques inverses étaient toujours imprimées lors de l'utilisation de guillemets doubles, mais :

[[email protected] ~]$ echo "foo \" "
foo "
[[email protected] ~]$ echo "foo \\ "
foo \

Pourquoi la barre oblique inverse apparaît-elle dans la première ligne de code ?

Réponse acceptée :

La section 3.1.2.3 Double Guillemets du manuel GNU Bash indique :

La barre oblique inverse conserve sa signification particulière uniquement lorsqu'elle est suivie de l'un des
caractères suivants : '$ ', '` ', '" ', '\ ', ou newline . Entre guillemets doubles, les barres obliques inverses suivies d'un
de ces caractères sont supprimées. Les barres obliques inverses précédant les caractères
sans signification particulière ne sont pas modifiées. Un guillemet double peut être placé
entre guillemets doubles en le faisant précéder d'une barre oblique inverse. Si
activé, l'expansion de l'historique sera effectuée à moins qu'un '! ' apparaissant
entre guillemets doubles est échappé à l'aide d'une barre oblique inverse. La barre oblique inverse précédant
le ‘! ' n'est pas supprimé.

Ainsi \ entre guillemets doubles est traité différemment à la fois de \ entre guillemets simples et \ hors guillemets. Il est traité littéralement sauf lorsqu'il est en mesure de faire en sorte qu'un caractère soit traité littéralement qui pourrait autrement avoir une signification particulière entre guillemets doubles.

Notez que des séquences comme \' , \? , et \* sont traités littéralement et la barre oblique inverse n'est pas supprimée, car ' , ? et * n'ont déjà aucune signification particulière lorsqu'ils sont placés entre guillemets doubles.


Linux
  1. Pourquoi tout le monde utilise Docker ?

  2. Suppression des guillemets simples et doubles dans une chaîne à l'aide des commandes Linux bash / standard uniquement

  3. Quand mettre des guillemets autour d'une variable shell ?

  4. Pourquoi mon $LD_LIBRARY_PATH est-il désactivé lors de l'utilisation de screen avec bash ?

  5. commande introuvable lors de l'utilisation de sudo

Pourquoi tout le monde devrait essayer d'utiliser Linux

Pourquoi Shotwell a-t-il inversé les positions X et Y lors de l'utilisation du recadrage ?

Pourquoi les couleurs Git n'apparaissent-elles pas lors de l'utilisation de Watch ?

emplacement du fichier temporaire lors de l'utilisation de tmpfile() en C

Pourquoi ma construction d'Ubuntu est-elle lente lors du déplacement des fenêtres ?

REJECT vs DROP lors de l'utilisation d'iptables