Quelle fonction dois-je utiliser pour échapper à des chaînes pour l'argument de commande shell en C? p>
J'ai une chaîne: p>
Ce sera une erreur: p>
Ce sont ok: p>
Y a-t-il une fonction prédéfinie convertie # 2 en 3 en C? p> ceci est une chaîne avec () caractères code> p> li>
echo ceci est une chaîne avec () caractères code> p> li>
écho "Il s'agit d'une chaîne avec () caractères" code> p>
echo Ceci est une chaîne avec \ (\) caractères code> p> li>
ol>
5 Réponses :
rien prédéfini et quels caractères ont besoin d'échappement dépend de votre coquille. Regardez les documents pour votre coquille et remplacez chaque x avec \ x. Utiliser des guillemets doubles "nécessitera le même traitement si la chaîne que vous entourez contient un". P>
Notez également que cela sera plus compliqué si vous avez l'intention d'encapsuler des expressions plus compliquées (tout ce qui est aggravé avec un ';', par exemple) p>
Il n'y a pas de fonction prédéfinie. P>
Cependant, je pense qu'il suffit de joindre n'importe quel argument de coque dans des guillemets simples et de veiller à ce que les guillemets simples soient échappées. P>
C'est la logique du Fonction ESCAPESHellarg en PHP et je le crois fonctionne raisonnablement bien. P>
Dans le contexte des coquilles, notez qu'il existe une différence entre QOUTER avec des guillemets simples ou doubles. Avec des citations doubles Vous devez échapper $ et ` aussi bien .
Notez plus loin que les coquilles n'autorisent pas les citations simples en cordes cotées.
Remplacement de toutes les instances de ' code> avec
' \ '' '' code> enfermant la chaîne complète en guillemets simples (
' code>) est un moyen sûr. Cela fonctionne même avec des nouvelles lignes intégrées. Une autre méthode serait d'insérer
\ code> avant chaque caractère, sauf que vous devez alors faire un traitement spécial pour les nouvelles lignes car
\ code> suivi d'une nouvelle ligne est ignoré par la coque, non traité comme une nouvelle ligne littérale. Vous devez entourer de nouvelles lignes avec
' code> (guillemets simples). P>
Essayez ceci avec String: A'b. Pour moi, echo 'A \' B '... ne fonctionne pas dans Bash, mais echo' A '"" "" B' fait ....
@Erikaronesty: J'ai dit de remplacer ' code> avec
' \ '' ' code>, pas avec
\' code>.
Notez que citer ' code> donne des résultats
' '' '' '' '' code>, qui est en fait une séquence de trois chaînes qui sont ajoutées en évaluation. Par conséquent, ce n'est pas une citation réelle.
@ Manuelschneid3R: citation nécessaire. Votre commentaire ne correspond pas à la scission de champ de coquillage et de citer les travaux d'élimination même conceptuellement. Voir pubs.opengroup.org/onlinePubs/9699919799/uties/...
donné Escape'this ' Code>, il produira
'ESCAPE' \ '' '' '' "\ '' '<' '' code>, qui peut ensuite être transmis à
echo code>. p>
La réaffectation n'est-elle pas une opération escompte? Je me souviens qu'il est possible que toute la chaîne soit copiée dans un nouvel endroit. Il serait préférable d'allouer 2 * str_size au début. Vous n'utilisez pas souvent des arguments avec beaucoup de ' code> mais toujours ...
Remplacez chaque citation ' code> avec
' \ '' ' code> enfermine la chaîne résultante entre les guillemets simples
' code>: