Remarque : les expressions sed contenant des variables BASH doivent être doublées ( "
) pour que la variable soit interprétée correctement.
Si vous également mettre la variable $BASH entre guillemets (pratique recommandée)
... vous pouvez alors échapper aux guillemets de la variable comme indiqué :
sed -i "s/foo/bar ""$VARIABLE""/g" <file>
C'est-à-dire qu'il faut remplacer la variable associée à $VARIABLE "
con ""
.
(Simplement -escaping "$VAR"
como \"$VAR\"
se traduit par une "
-(chaîne de sortie entre guillemets).
Exemples
$ VAR='apples and bananas'
$ echo $VAR
apples and bananas
$ echo "$VAR"
apples and bananas
$ printf 'I like %s!\n' $VAR
I like apples!
I like and!
I like bananas!
$ printf 'I like %s!\n' "$VAR"
I like apples and bananas!
Ici, $VAR est "
-entre guillemets avant de l'envoyer à sed (sed est soit '
- ou "
-(citation) :
$ printf 'I like %s!\n' "$VAR" | sed 's/$VAR/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed 's/"$VAR"/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed 's/$VAR/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed 's/""$VAR""/cherries/g'
I like apples and bananas!
$ printf 'I like %s!\n' "$VAR" | sed "s/$VAR/cherries/g"
I like cherries!
$ printf 'I like %s!\n' "$VAR" | sed "s/""$VAR""/cherries/g"
I like cherries!
Comparez cela à :
$ printf 'I like %s!\n' $VAR | sed "s/$VAR/cherries/g"
I like apples!
I like and!
I like bananas!
$ printf 'I like %s!\n' $VAR | sed "s/""$VAR""/cherries/g"
I like apples!
I like and!
I like bananas!
... et ainsi de suite ...
Conclusion
Ma recommandation, en tant que pratique courante, est la suivante
"
-citer les variables BASH ( "$VAR"
)
-
"
-Citation, à nouveau , les variables ( ""$VAR""
) s'ils sont utilisés dans une expression sed (qui doit elle-même être "
-citation, pas '
-(citation)
$ VAR='apples and bananas'
$ echo "$VAR"
apples and bananas
$ printf 'I like %s!\n' "$VAR" | sed "s/""$VAR""/cherries/g"
I like cherries!