2017-08-31 5 views
0

J'ai le fichier $ HOME/foo/foo.movEst-ce que glob fonctionne différemment avec [[]] vs [] dans Bash?

if [[ -f $HOME/**/*.mov ]]; then 
    echo "file is there" else 
    echo "file is not there" 
fi 

échos "fichier est pas là". tandis que,

if [ -f $HOME/**/*.mov ]]; then 
    echo "file is there" else 
    echo "file is not there" 
fi 

échoue "fichier là".

Pourquoi la différence entre [[]] et []?

+1

pertinent: https://unix.stackexchange.com/questions/306111/confused-about-operators-vs-vs-vs –

+0

shellcheck me dit que [-f] ne fonctionne pas avec globs. Est-ce vrai? – Bleakley

+1

@Bleakley Je pense que oui, le glob est développé avant que les commandes soient exécutées, donc s'il y a plus d'une chose qui correspond au glob, vous auriez trop d'arguments à '-f', si vous aviez' nullglob' activé vous ' J'en ai trop peu si le glob ne correspond à rien. Est-ce que vous essayez de dire s'il y a des fichiers et c'est tout? –

Répondre

2

Les arguments de la commande [ sont soumis à une extension de chemin d'accès; les mots utilisés à l'intérieur de [[ ... ]] ne le sont pas.

Si vous obtenez file is there, je suppose que vous avez exactement un fichier qui correspond au modèle. Sinon, vous auriez trop d'arguments pour -f, ou le motif serait traité comme une chaîne littérale qui ne nomme pas un fichier existant. Shell: