Pourquoi find ne "voit-il" pas le tilde ?

Je donne ma langue au chat !

Voici un petit script bash très simple

#! /bin/sh
# find "chemin départ" "partie du répertoire à trouver"

echo "Entrez le chemin de recherche \c"
read REP
echo "Rechercher dans le repertoire ->[$REP]<-"
echo
echo "Entrez la chaine à rechercher \c"
read QUOI
echo "Rechercher un NonDeRepertoire contenant ->[$QUOI]<-"
echo 
echo "---------------------- Resultat de recherche ----------------------------------"
echo "\$REP contient -->[$REP]<--"
find $REP -type d -iname "$QUOI"  -print
echo

Lorsque j’exécute avec un “~” tilde comme chemin de départ de recherche, j’obtiens une erreur
Voici:

michel: ~/bin$ frep.sh
Entrez le chemin de recherche ~
Rechercher dans le repertoire ->[~]<-

Entrez la chaine à rechercher michel
Rechercher un NonDeRepertoire contenant ->[michel]<-

---------------------- Resultat de recherche ----------------------------------
$REP contient -->[~]<--
find: "~": Aucun fichier ou dossier de ce type

michel: ~/bin$

Alors que si j’indique “/home/michel” comme chemin cela fonctionne !!!
Je n’y comprend rien !
Voici:

michel: ~/bin$ frep.sh
Entrez le chemin de recherche /home/michel
Rechercher dans le repertoire ->[/home/michel]<-

Entrez la chaine à rechercher michel
Rechercher un NonDeRepertoire contenant ->[michel]<-

---------------------- Resultat de recherche ----------------------------------
$REP contient -->[/home/michel]<--
/home/michel
/home/michel/.cache/geeqie/thumbnails/home/michel
/home/michel/10_QRA/55_QRA_Administration/40_Santé/40_Ohtalmologie/Michel
/home/michel/.local/share/geeqie/metadata/home/michel

michel: ~/bin$ 

Pour vérifier j’ai fait:

michel: ~/bin$ echo ~
/home/michel
michel: ~/bin$ 

Mon ~ est donc bien /home/michel

Quelqu’un (avec un oeil neuf) peut-il me dire l’énormité que je suis incapable de voir ?
D’avance merci.

SVPL me renvoyer vers man pages ne m’aidera pas…

If a word begins with an unquoted tilde character …

michel@debG53SW:~$ echo ~
/home/michel
michel@debG53SW:~$ echo "~"
~
michel@debG53SW:~$ echo ~/test
/home/michel/test
michel@debG53SW:~$ echo "~/test"
~/test
michel@debG53SW:~$ 
michel@debG53SW:~$ echo $HOME/test
/home/michel
michel@debG53SW:~$ echo "$HOME/test"
/home/michel
michel@debG53SW:~$ 

=======

[quote]SVPL me renvoyer vers man pages ne m’aidera pas…[/quote] :slightly_smiling: Tu dis ça, mais je sais qu’au fond de toi, tu le pense pas vraiment :slightly_smiling: :

man bashdans la page du man de [mono]bash[/mono],
entre : [mono]/Développement du tilde[/mono]
puis touche : [mono]entrée[/mono]
puis touche : [mono]n[/mono]

enjoy.

Merci MicP de m’avoir répondu.

Cependant j’ai beau relire ta réponse ainsi que le chapitre “Développement du tilde” du man bash,
je ne capte toujours pas ce qui se passe !

Il me semble comprendre que mon tilde se comporte comme un tilde protégé, mais je ne vois pas pourquoi.
En résumé, je fais

read REP
read QUOI
find $REP -type d -iname "$QUOI"  -print

Le fait d’avoir entré un tilde en réponse à la commande read REP l’aurait protégé automatiquement ?
Sorry, je ne vois pas,
et le chat continue de se régaler avec ma langue ! :wink: :119 :013

J’ai fait un essai d’appel du script avec transmission de paramètres, et là, le tilde est bien remplacé par $HOME et donc le script “marche”

find $1 -type d -iname $2  -print

Quel serait donc la bonne syntaxe en conservant l’utilisation des read dans mon script d’origine ?

Nb:Ce qui me désole de temps en temps, c’est de passer des heures à chercher des choses “à priori simples et évidentes” pour les gourous du bash

Effectivement, j’avais lu un peu trop vite tes exemples de script, du coup j’ai zappé que ce [mono]~[/mono] n’était
pas un argument du script, et l’interpréteur de ce script (bash ou dash) aurait pu le “développer” en “nom du répertoire de l’utilisateur”,
mais était un argument de la commande interne [mono]read[/mono], dont le rôle est de lire une ligne de donnée(s) et la/les affecter telles quelle(s) à une ou des variables.

La “belle” histoire que je racontais dans mon post précédent est donc “hors sujet”.

Dois-je comprendre par là qu’une construction de type
find VariableChemin -type d -iname VariableQuoi -print
ne permet pas le développement de la variable ($REP)lorsqu’elle est lue ?

Alors que la construction
find $1 -type d -iname $2 -print
elle, fonctionne bien avec l’envoi d’un unique tilde !..

Ce serait étonnant non ?

Dans tes scripts, c’est la commande [mono]read[/mono] qui affecte une valeur à la variable [mono]REP[/mono],
et [mono]read[/mono] n’interprète ni ne développe rien.

C’est seulement ensuite que [mono]find[/mono] utilisera la variable [mono]REP[/mono].

=======
Par contre c’est le [mono]shell[/mono] qui développera les arguments de sa ligne de commande avant d’affecter à [mono]$1[/mono] et a [mono]$2[/mono] leur valeur.

=======
aral.iut-rodez.fr/fr/sanchis/enseignement/bash/

Oui Ok, compris !
Merci MicP d’y avoir consacré du temps.

J’ai commencé à “toucher du doigt” bash en 2008.
Je suis moins paumé qu’au début, mais je continue à penser que bash reste un langage relativement “indigeste” quand-même.
Ce que l’on ecrit et teste en 1/2h sous C (par ex), l’on mettra des heures à le déverminer sous bash.
Mais bon ça reste d’une efficacité manifeste ce shell !

Allez, encore merci à toi.
:023

(Je mets en résolu)