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.
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\""
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
.
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).