Empêcher l'expansion de *
Le
Vincent Verdon
Bonjour à tous,
j'ai un script bash qui est appelé avec un argument qui peut être "*".
Je ne parviens pas à empêcher l'expansion de l'argument quand il s'agit
du symbole *.
Y-a-t-il une solution ? Je cherche sans trouver :-(
Amicalement, Vincent Verdon
j'ai un script bash qui est appelé avec un argument qui peut être "*".
Je ne parviens pas à empêcher l'expansion de l'argument quand il s'agit
du symbole *.
Y-a-t-il une solution ? Je cherche sans trouver :-(
Amicalement, Vincent Verdon

Poser une question


Ben, suffit de protéger l'argument entre simples ou doubles quotes (" ou ') lors
de l'appel, tout simplement (ou alors je n'ai pas bien compris la question...)
--
Gilles
le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message
set -f
--
Benoit Izac
Le 01/12/2010 21:16, Benoit Izac a écrit :
Hélas non, j'ai déjà essayé.
Un exemple :
#!/bin/bash
set -f
OP=$1
echo "parametre = $1"
Si je passe en paramètre du script *, cela renvoie le nom du premier
fichier rencontré dans le rep courant.
Si je veux récupérer *, je dois passer '*' en paramètre.
J'imagine que Bash commence son travail d'expansion dès la lecture du
script : il fait l'expansion de * et place le résultat dans $1, avant de
prendre en compte set -f.
Merci de la réponse.
Amicalement, Vincent Verdon
le 01/12/2010 à 22:15, Vincent Verdon a écrit dans le message
C'est exactement ça, c'est le shell qui appelle le script qui fait
l'expansion. Donc soit tu fais un « set -f » dans ton shell courant,
soit tu échappes * : sh script.sh *
--
Benoit Izac
Sous Windows, c'est les commandes qui traitent les arguments, mais sous
Unix, c'est le shell qui fait ce travail. Ainsi le * sera interprété par
le shell comme la liste des fichiers du répertoire courant (si la liste
n'est pas trop longue), puis le shell script sera appelé avec cette
liste, et donc plus de *. Le cas où * est passé tel-quel est le cas où
il n'y a pas de fichier dans le répertoire courant (en ignorant ceux qui
sont cachés).
Exemple :avec "echo" à la place du shell
mkdir a && cd a && echo * && touch b c && echo * && rm b c && cd .. &&
rmdir a
*
b c
--
Éric Lévénez -- Unix is not only an OS, it's a way of life.