Shell-script reconnaissance de '
jakol
-
lami20j Messages postés 21644 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21644 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
shell-script reconnaissance de '
Bonjour,
j'ai fait le shell script suivant:
#!/bin/sh
i=$1
shift
while [ $i -ne 0 ]
do
echo $* >toto
i=$[$i-1]
done
exit
lorsque je lance le programmeen mettant des arguments
$ ./repeat 2 je m\'\appelle jakol # j'ai mis deux \ entre la '
je m'appelle jakol
je m'appelle jakol
c'est bon
mais quand je lance:
./repeat 2 je m'appelle jakol # ' n'est reconnu comme faisant parti des caractères
>
Y aurait-il un moyen dans le script de le faire reconnaitre comme un élément de la phrase ?
merci d'avance pour vos réponses
:o)
Bonjour,
j'ai fait le shell script suivant:
#!/bin/sh
i=$1
shift
while [ $i -ne 0 ]
do
echo $* >toto
i=$[$i-1]
done
exit
lorsque je lance le programmeen mettant des arguments
$ ./repeat 2 je m\'\appelle jakol # j'ai mis deux \ entre la '
je m'appelle jakol
je m'appelle jakol
c'est bon
mais quand je lance:
./repeat 2 je m'appelle jakol # ' n'est reconnu comme faisant parti des caractères
>
Y aurait-il un moyen dans le script de le faire reconnaitre comme un élément de la phrase ?
merci d'avance pour vos réponses
:o)
A voir également:
- Shell-script reconnaissance de '
- Classic shell - Télécharger - Personnalisation
- Reconnaissance musique en ligne sans télécharger - Guide
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
2 réponses
Salut,
Non tu ne pourras pas dans la mesure où ce n'est pas le script qui pose problème mais le shell qui lance le script.
La quote simple (tout comme la double d'ailleurs) est un des caractères réservés du shell qu'il faut absolument échapper pour une interprétation littérale...
Tu peux toujours entourer l'expression par des quotes doubles, mais à ce moment là il n'y aura plus que 2 arguments dans ta ligne de commande !
./repeat 2 "je m'appelle jakol"
$1 = 2
$2 = "je m'appelle jakol"
;-))
Non tu ne pourras pas dans la mesure où ce n'est pas le script qui pose problème mais le shell qui lance le script.
La quote simple (tout comme la double d'ailleurs) est un des caractères réservés du shell qu'il faut absolument échapper pour une interprétation littérale...
Tu peux toujours entourer l'expression par des quotes doubles, mais à ce moment là il n'y aura plus que 2 arguments dans ta ligne de commande !
./repeat 2 "je m'appelle jakol"
$1 = 2
$2 = "je m'appelle jakol"
;-))
Salut,
L'apostrophe simple est un caractère de protection pour le shell.
Voir le man bash
L'apostrophe simple est un caractère de protection pour le shell.
Voir le man bash
PROTECTION
Les protections (quoting) permettent de forcer l'interpréteur à ignorer la signification spéciale de certains caractères ou mots. Les protections peuvent être utilisées pour désactiver le traitement des caractères spéciaux,
éviter la reconnaissance des mots réservés ou empêcher le développement des paramètres.
Tous les métacaractères décrits plus haut dans DÉFINITIONS ont des significations spéciales pour l'interpréteur et doivent être protégés pour ne représenter que leur propre caractère.
Lorsque les outils de développement de l'historique des commandes sont utilisés (voir plus bas DÉVELOPPEMENT DE L'HISTORIQUE ), le caractère de développement de l'historique, généralement !, doit être protégé pour éviter le
développement de l'historique.
Il y a trois mécanismes de protection : le caractère d'échappement, les guillemets simples (« single quote ») et les guillemets doubles (« double quote »).
Un caractère contre-oblique (\) non protégé, est le caractère d'échappement. Il préserve la valeur littérale du caractère qui le suit, à l'exception du <saut de ligne>. Si un couple \<saut de ligne> apparaît et si la con-
tre-oblique n'est pas elle-même protégée, l'ensemble \<saut de ligne> est considéré comme une continuation de ligne (c'est-à-dire qu'il est supprimé du flot d'entrée et ignoré en pratique).
Encadrer des caractères entre des guillemets simples préserve la valeur littérale de chacun des caractères entre guillemets simples. Un guillement simple ne peut pas être placé entre deux guillemets simples, même s'il est
précédé d'une contre-oblique.
Encadrer des caractères entre des guillemets doubles préserve la valeur littérale de chacun des caractères sauf $, `, \ et, lorsque le développement de l'historique est activé, !. Les caractères $ et ` conservent leurs sig-
nifications spéciales entre guillemets doubles. La contre-oblique ne conserve sa signification spéciale que lorsqu'elle est suivie par l'un des caractères suivants : $, `, ", \ ou <saut de ligne>. Un guillemet double peut
être protégé entre deux guillemets doubles en le faisant précéder d'une contre-oblique. S'il est activé, le développement de l'historique sera effectué, à moins qu'un ! apparaissant entre guillemets doubles ne soit protégé
par une contre-oblique. La contre-oblique précédant le ! n'est pas supprimée.
Les caractères spéciaux * et @ ont des significations spéciales lorsqu'ils se trouvent entre des guillemets doubles (voir PARAMÈTRES plus bas).
Les mots de la forme $'chaîne' sont traités spécialement. Le mot est développé en chaîne avec les caractères protégés par contre-oblique remplacés comme spécifié par le standard ANSI C. Les suites d'échappement par con-
tre-oblique, si présentes, sont décodées comme suit :
\a alerte (alarme)
\b effacement arrière (backspace)
\e caractère d'échappement
\f saut de page (form feed)
\n saut de ligne (new line)
\r retour chariot (carriage return)
\t tabulation horizontale
\v tabulation verticale
\\ contre-oblique
\' guillemet simple
\nnn le caractère 8 bits dont la valeur octale est nnn (de un à trois chiffres)
\xHH le caractère 8 bits dont la valeur hexadécimale est HH (un à deux symboles hexadécimaux)
\cx un caractère contrôle-x
Le résultat développé est protégé par des guillemets simples comme si le symbole dollar n'avait pas été présent.
Une chaîne entre guillemets doubles précédée d'un symbole dollar ($) conduira à la traduction de la chaîne selon le paramètre linguistique régional en vigueur. Si le paramètre linguistique régional courant est C ou POSIX,
le symbole dollar est ignoré. Si la chaîne est traduite et remplacée, le résultat est protégé par des guillemets doubles.