J'ai reçu un script de base de données qui recherche des ID en double, quand on lui donne un ID, un nom de famille et un prénom. Voici la viande et les pommes de terre de celui-ci:Bash - Échapper à des guillemets simples
PSQL="psql -p $PGPORT -h $DBHOST -d $DB -tAc "
DUP_ID=$($PSQL "SELECT id FROM inmate WHERE id NOT SIMILAR TO '(0*)${1}' AND lastname ILIKE '${_LNAME}' AND firstname ILIKE '${_FNAME}' LIMIT 1")
fonctionne très bien, sauf quand la dernière ou le prénom a une apostrophe en elle, comme « O'Neil ». J'ai essayé d'échapper à une instance de «avec», et n'ont pas encore rencontré de succès. J'ai passé toute la journée à chercher sur les forums, et j'ai essayé différentes variantes, mais je n'ai toujours pas ajouté un \ devant chaque '.
Voici ce que je suis arrivé à ce jour:
local _LNAME=`echo "${2}" | sed "s/'/\\\'/g"`
local _FNAME=`echo "${3}" | sed "s/'/\\\'/g"`
echo -e $_LNAME
echo -e $_FNAME
# Output
O'Neil
Robert
Comme toujours, merci à l'avance!
Qu'est-ce que le 'echo | chose sed? Bash a intégré des opérateurs d'expansion de paramètre pour effectuer la manipulation de chaîne; par exemple, vous pouvez exécuter: 'in =" '"; out = "\\ '"; escaped_lname = $ {lname // $ in/$ out} ', et ce sera beaucoup plus rapide et efficace que d'essayer de jouer avec sed. –
... Notez également que les majuscules et les minuscules sont classiques pour les variables d'environnement et les variables internes. Les variables locales à votre script doivent contenir au moins un caractère minuscule pour éviter les collisions d'espaces de noms avec ces classes. –
Rappelez-vous [Little Bobby Tables] (http://xkcd.com/327/)! –