Premier cas:
echo $'$foo'
Quels échos $foo
(ce qui signifie que le premier $
de ma commande d'écho est supprimé)
Le premier $
est exécuté comme une commande. Echo ne nécessite pas d'espaces entre les arguments, il les prend juste.
Donc, écho se $'$foo'
développe pour exécuter la commande $
(qui n'est pas une commande, donc il l'ignore), puis écho '$foo'
. Tout ce qui ''
est dedans est pris à sa valeur nominale - il ne l'étend pas ou quoi que ce soit. Vous pouvez mettre ce que vous voulez '' et rien ne se passe.
Si vous remplacez le $
par, $$
il fait écho à l'ID de processus.
Seconde:
echo $"$foo"
Cet écho pwd
(ce qui signifie que le bash se développe $foo
, ma variable, à sa valeur)
C'est parce que ""
cela ne l'empêche pas de se développer. ""
est normalement utilisé pour s'assurer qu'il existe une valeur à comparer.
Si vous avez une variable qui pourrait être vide (par exemple, elle provient d'un grep
résultat), alors vous voulez comparer avec une autre valeur / variable, vous devez mettre la première variable dedans ""
. Cela garantit qu'il y a toujours une comparaison à vérifier, plutôt qu'une simple section de code vide (comme le voit bash) qui donne une erreur.
Enfin, le numéro 3. C'est intéressant.
echo $`$foo`
Cet écho $~/scripts
(je m'attendais à ce qu'il s'imprime ~/scripts
et non $~/scripts
)
C'est parce que (dans ce cas) l'écho imprime d'abord le $
caractère. Mettre quelque chose entre guillemets provoque l' exécution de la valeur de la variable en tant que commande (la meilleure façon de le faire dans les versions plus récentes de bash est $(command)
)
Donc, d'abord, il fait écho $
puis il se développe `$foo`
vers `pwd`
lequel est exécuté et retourne ~/Scripts
. Mais nous avons eu l' $
impression plus tôt - donc la sortie entière est $~/Scripts
.