J'essaie de déterminer si un fichier ou un répertoire n'existe pas. J'ai essayé les commandes suivantes pour voir si un fichier existe et ils fonctionnent correctement:Étrangeté avec bash opérateur non
if [ -a 'settings.py' ]; then echo 'exists'; fi
exists #output
if [ -a 'foo' ]; then echo 'exists'; fi #outputs nothing
Mais quand j'essaie ceci:
if [ ! -a 'settings.py' ]; then echo 'does not exist'; fi
does not exist #shouldn't be output since the file does exist
if [ ! -a 'foo' ]; then echo 'does not exist'; fi
does not exist
«n'existe pas » est sortie, peu importe quoi.
Ouais. Explication supplémentaire: '-a' est interprété comme" et "plutôt que" test d'existence "quand ce n'est pas la première chose après' ['. "Non et" n'a pas de sens, dites-vous? Ayup. C'est l'une des nombreuses raisons pour lesquelles vous ne devriez jamais utiliser '-a' /' -o' dans leurs significations "et"/"ou", soit; utilisez '[...] && [...]'/'[...] || [...] 'à la place. Annoyamment verbeux, dites-vous? Ayup. Shell suce, film à onze heures. – zwol