Empêcher bash d'interpréter une variable

Le problème exposé dans ce sujet a été résolu.

Bonjour,

Je réalise un script bash qui manipule des chaînes de caractères. Ces chaînes de caractères contiennent des commandes systèmes (par exemple: ls, cd, …).

Ma question est simple: comment faire pour manipuler ces variables (je souhaiterais notamment vérifier si elles correspondent à une regex), sans que bash ne remplace le contenu de la variable par le résultat de la commande (c’est-à-dire que bash va se retrouver à vérifier si la liste de mes fichiers vérifie ma regex, ce n’est pas le comportement que je souhaite…) ?

Merci d’avance.

Je ne suis pas sûr de bien comprendre la question mais bash n’interprète que les strings entre back-quotes (`) donc il suffirait de les mettre entre double-quotes (") ou simple-quotes (’).

+1 -0

Salut,

Lorsque tu mets $test (ou l’écriture préférée ${test}) (au passage, c’est pas une super idée de nommer une variable test comme c’est aussi un programme de coreutils) sur une ligne à part, tu demandes explicitement au shell de résoudre le nom et d’exécuter la ligne correspondante. Ça ne t’empêche pas de manipuler le contenu de la variable dans une condition :

1
2
3
4
5
testls="ls"
if [[ ${testls} == "ls" ]]
then
    echo 'OK'
fi

Et si tu voulais manipuler le résultat de la commande ls, ce serait

1
`${testls}`

qu’il faudrait écrire.

Enfin, pour les regex, il ne faut pas les entourer de guillemets, sinon tu essayes de matcher avec une chaîne contenant littéralement les caractères ^cd$, et pas une regex.

Par exemple :

1
2
3
4
5
testls="ls"
if [[ ${testls} =~ ^ls$ ]]
then
    echo 'OK'
fi
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte