Bash et passage de parametre

Tags: #<Tag:0x00007f63f21efca0>

Bonjour
Une question où je n’arrive pas à trouver de réponse
Le script trouve.sh

#!/bin/bash
find  ~/  -maxdepth 2 -iname "$1" -type f

Ne renvoie pas la même chose que la ligne de commande identique
Par exemple

$ ls -R [mM]*
moi.doc
Me.doc
Meilleur.doc
/monrep/monfichier.html
/monrep/monfichier1.html
/monrep/monfichier2.html
/monrep/Fichier.html
$trouve.sh  M*
$
$trouve.sh M*.*
$Meilleur.doc
$~/monrep/monfichier2.html

Pourtant

$find  ~/  -maxdepth 2 -iname "M*" -type f
$moi.doc
$Me.doc
$Meilleur.doc
$~/monrep/monfichier.html
$~/monrep/monfichier1.html
$~/monrep/monfichier2.html

Il semble que seule la dernière occurence de chaque répertoire s’affiche
Et le paramètre « $1 » n’est pas interprété de la même façon que celui de la ligne de commande.

Comment corriger ce comportement ?

MERCI

« M* » est développé avant d’être passé au script, et $1 ne contient que le premier élément.

Merci bcp pour cette réponse
Mais ca n’explique pourquoi je n’ai qu’un seul résultat
Je vais essayer un alias pour voir

Au contraire, ça explique pourquoi : $1 ne contient qu’un seul nom de fichier donc la recherche ne peut trouver que les fichiers ayant ce nom…

Salut,
En effet c’est totalement normale comme dis pascale ton expression est traduite avant la passer en argument ce qui provoque pas le résultat que tu recherches.
tu peux protéger tes arguments en les protégeant

Avec des guillemets " " double  => afin de préserver l interprétation des variables 
ou des ' '  simple  => en cas ou tu veux du strict

ça devrait rouler sans souci après