GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi le tilde (~) ne se développe-t-il pas à l'intérieur des guillemets doubles ?

Selon cette réponse et ma propre compréhension, le tilde se développe dans le répertoire personnel :

$ echo ~
/home/braiam

Maintenant, chaque fois que je veux que l'extension du shell fonctionne, c'est-à-dire. e. en utilisant des noms de variables tels que $FOO , et ne coupez pas les caractères inattendus, tels que les espaces, etc., vous devez utiliser des guillemets doubles " :

$ FOO="some string with spaces"
$ BAR="echo $FOO"
$ echo $BAR
echo some string with spaces

Pourquoi cette extension ne fonctionne-t-elle pas avec le tilde ?

$ echo ~/some/path
/home/braiam/some/path
$ echo "~/some/path"
~/some/path

Réponse acceptée :

La raison, parce qu'à l'intérieur des guillemets doubles, tilde ~ n'a pas de signification particulière, il est traité comme littéral.

POSIX définit les guillemets doubles comme :

Les caractères placés entre guillemets doubles (" ") doivent préserver la valeur littérale de tous les caractères entre guillemets doubles, à l'exception
des caractères signe dollar, guillemet inversé et barre oblique inversée,

L'application doit s'assurer qu'un guillemet double est précédé d'une
barre oblique inverse à inclure dans les guillemets doubles. Le paramètre '@' a
une signification particulière à l'intérieur des guillemets

Sauf $ , ` , et @ , les autres caractères sont traités comme littéraux entre guillemets doubles.


Linux
  1. Pourquoi le serveur a-t-il bloqué mon IP ?

  2. Pourquoi le script Bash ne reconnaît-il pas les alias ?

  3. Pourquoi le PC ne lit-il pas les DVD ? ?

  4. À quoi sert $# dans Bash

  5. Pourquoi la taille de la partition d'échange devrait-elle être le double de la taille de la RAM ?

Quand les guillemets doubles sont-ils nécessaires ?

Pourquoi Printf est-il meilleur qu'Echo ?

Quelle est la différence entre le point-virgule et la double esperluette && ?

Citations à l'intérieur Backticks Inside Quotes In Ksh?

Comment voir la ligne de commande exacte en cours d'exécution dans une instance Bash ?

Pourquoi Apt-get Autoremove ne supprime-t-il pas les anciens noyaux ?