web-dev-qa-db-fra.com

Y a-t-il un moyen d'imprimer la valeur à l'intérieur de la variable à l'intérieur d'une citation unique?

Considérons que j'ai défini une variable site et doit être imprimé par echo ou printf, mais si j'utilise un devis unique pour écrire quelque chose et que vous souhaitez utiliser une variable, puis?

Exemple:

$ site=unix.stackexchange.com
$ echo "visit:$site"
visit:unix.stackexchange.com

Mais si j'utilise une citation unique:

$ echo 'visit:$site'
visit:$site

Ensuite, nous savons que '' est une citation forte et n'élargra pas la variable

J'ai essayé quelque chose:

$ echo 'visit:"$site"'
visit:"$site"

mais ne réussissez pas. Donc, je cherche moyen d'imprimer la valeur à l'intérieur de la variable tout en utilisant une citation unique.

9
Pandya

Vous ne pouvez pas développer les variables en guillemets simples. Vous pouvez mettre fin à des citations simples et démarrer des citations doubles, cependant:

echo 'visit:"'"$site"'"'

Ou, vous pouvez retourner double citations à l'intérieur des devis doubles:

echo "visit:\"$site\""
20
choroba

Lorsque vous faites face à l'impression de contenu variable, vous devez vous en tenir à Printf au lieu d'ECHO :

printf 'visit:%s\n' "$site"

va sortir visit: suivi du contenu de $site et une nouvelle ligne quel que soit les personnages de $site.

8
cuonglm

la choroba est correcte.

Bien que si c'était une sorte d'énigme, je répondais avec ceci:

cat << EOF | sh
> echo 'visit:$site'
> EOF

Comme le souligne Jander, cela est grand ouvert pour une attaque d'injection. Ce n'était pas une réponse sérieuse, alors si quelqu'un envisageait d'utiliser quelque chose comme ça, ne l'utilisez pas avec une entrée non approuvée. Par exemple, validez le $site String comme étant une URL valide avant d'exécuter aveuglément le contenu. Quelque chose comme - ceci pourrait aider (mais l'expression fournie n'est pas parfaite car elle permet toujours d'injection, mais utilisez ce type de mécanicien pour le tester).

1
Stephen