2008-11-03 11 views
1

J'ai un simple script linux:Pourquoi guillemet changer le résultat

#!/bin/sh 
for i in `ls $1` 
do 
     echo $i 
done 

Dans mon dossier temp sont 4 fichier: aa, a.aa, a.ab et a.ac

Quand j'appelle ./script temp/*. ?? je reçois:

temp/a.aa 

Quand j'appelle ./script "temp/*. ??" Je reçois:

temp/a.aa 
temp/a.ab 
temp/a.ac 

Pourquoi le guillemet double change-t-il le résultat?

Répondre

7

Dans le premier cas, la coque à temp/*.?? développe:

temp/a.aa temp/a.ab temp/a.ac 

Puisque vous cherchez seulement au premier paramètre que dans votre script temp/a.aa est passé à ls. Dans le second cas, le shell n'exécute aucun développement à cause des guillemets et le script reçoit le seul argument temp/*.?? qui est étendu dans l'appel à ls.

1

Parce que sans les guillemets du shell élargit votre appel à:

./script temp/a.aa temp/a.ab temp/a.ac 

Alors $1 est temp/a.aa au lieu de temp/*.??.