Je lis aujourd'hui un didacticiel sur le shell à partir de http://www.tutorialspoint.com/unix/unix-quoting-mechanisms.htm
Dans lequel il mentionne:
Si un seul guillemet apparaît dans une chaîne à afficher, vous ne devez pas placer la chaîne entière entre guillemets simples, au lieu de cela, vous devez précéder cette utilisation d'une barre oblique inverse () comme suit:
echo 'It\'s Shell Programming'
J'ai essayé cela sur mon serveur centos, cela ne fonctionne pas, un message me >
demande de taper plus.
Je me demandais, puisque deux guillemets simples transforment tous les caractères spéciaux en caractères normaux, qui incluent le symbole d'échappement \
, mais s'excluent eux-mêmes, le '
,
comment dois-je représenter une seule guillemet simple '
dans une phrase entre guillemets simples?
echo It\'s Shell Programming
ouecho "It's Shell Programming"
?echo Wow, I'm going to have lots of $$$$$$ now
$
également. Quelque chose commeecho Wow, I\'m going to have lots of \$\$\$\$\$\$ now
ou justeecho Wow, I\'m going to have lots of '$$$$$$' now
echo 'It'"'"'s Shell Programming'
. Je le divise simplement en 3 chaînes, la première et la dernière entourées de guillemets simples, mais celle du milieu a une guillemet simple entourée de guillemets doubles.Réponses:
Le tutoriel est faux.
POSIX dit:
Voici quelques alternatives:
Pour en savoir plus: Citations - Greg's Wiki
la source
echo 'It''s Shell Programming'
- zsh avecrc_quotes
jeu d'options (et le shell rc aussi) - une paire de guillemets simples à l'intérieur de guillemets simples représente un seul guillemet simple.q="'"
etqq='"'
pour faire ce nettoyant. Cela permet alorsecho "It${q}s ${qq}Shell Programming${qq}"
(des accolades sont nécessaires étant donné les lettres de fin). Sécurité POSIX. La couche externe doit être placée entre deux guillemets.Vous pouvez utiliser:
Pour shell en toute sécurité citer une ligne de valeur par ligne.
En fonction du shell, vous pouvez également avoir la possibilité de faire:
Bien que je préfère généralement faire:
Une approche plus manuelle pourrait ressembler à:
... qui est, au moins, sans fourche.
la source
printf %q\\n "$arbitrary_value"
, d'autres sont trop compliqués.Au cas où quelqu'un d'autre viendrait pour mettre un mélange de guillemets simples et doubles dans un fichier, cela fonctionne aussi:
Tout ce que le shell peut voir comme une variable doit être échappé par une barre oblique inverse:
la source