Mon manuel KornShell (ksh) indique que l'expression -d
renvoie true si le fichier existe et qu'il s'agit d'un répertoire. Donc if [[ -d file ]]
doit renvoyer TRUE si file
est un répertoire. Mais dans mon cas, ce n'est pas comme ça que ça fonctionne. Il retourne TRUE si le fichier existe et n'est PAS un répertoire, mais le manuel des shells dit "et c'est un répertoire". Alors, quelqu'un a-t-il une idée de la raison pour laquelle il travaille à l'opposé de ce qu'il devrait être?Comportement étrange de l'expression -d conditionnelle
1
A
Répondre
3
Cela fonctionne bien; ce sont vos attentes qui sont fausses. Dans les shells, une valeur de retour est true, et une valeur de retour non nulle est false.
$ true ; echo $?
0
$ false ; echo $?
1
+0
La spéculation plausible, mais l'OP n'a pas dit qu'il examinait' $? '. –
0
ksh Opérateur de fichier | Vrai si:
- -a | fichier existe
- -d | fichier est un répertoire
- -f | fichier est un fichier normal (c'est-à-dire, pas un répertoire ou un autre type de fichier)
- -r | Vous avez l'autorisation de lecture sur le fichier
- -s | le fichier existe et n'est pas vide
- -w | Vous avez l'autorisation d'écriture sur le fichier
- -x | Vous avez l'autorisation d'exécution sur le fichier ou l'autorisation de recherche de répertoire s'il s'agit d'un répertoire
- -O | file Vous possédez un fichier
- -G | Votre fichier groupe ID est le même que celui du fichier
kshFileOperatorsFunction.ksh
#***Function to demo ksh file Operators.***#
fileOperators(){
echo "Entering fileOperators function."
if [[ ! -a $1 ]]; then
print "file $1 does not exist."
return 1
fi
if [[ -d $1 ]]; then
print -n "$1 is a directory that you may "
if [[ ! -x $1 ]]; then
print -n "not "
fi
print "search."
elif [[ -f $1 ]]; then
print "$1 is a regular file."
else
print "$1 is a special type of file."
fi
if [[ -O $1 ]]; then
print 'you own the file.'
else
print 'you do not own the file.'
fi
if [[ -r $1 ]]; then
print 'you have read permission on the file.'
fi
if [[ -w $1 ]]; then
print 'you have write permission on the file.'
fi
if [[ -x $1 && ! -d $1 ]]; then
print 'you have execute permission on the file.'
fi
echo "Exiting fileOperators function."
}
Référence: O'Reilly, Learning the KornShell Volume 1
Questions connexes
- 1. comportement de comportement étrange
- 2. Comportement étrange de marge
- 3. Comportement étrange de « noeud »
- 4. comportement étrange de as.POSIXct
- 5. comportement étrange de char
- 6. Comportement étrange de GDI +
- 7. Comportement étrange de realloc
- 8. Ant propertyregex comportement étrange
- 9. comportement fichier .bat étrange
- 10. AVL Tree comportement étrange
- 11. Comportement d'instruction IF étrange
- 12. Comportement étrange d'impression?
- 13. cudaMemsetAsync comportement étrange
- 14. Comportement étrange
- 15. comportement étrange Date php
- 16. Comportement étrange de (facet_grid)
- 17. Comportement étrange de ArrayList
- 18. comportement étrange de Zend_Session_Namespace
- 19. Comportement étrange de created_at
- 20. comportement étrange de git
- 21. Comportement étrange de ko.editables
- 22. comportement de tableau étrange?
- 23. Comportement étrange de AccessController.checkPermission
- 24. comportement étrange de preg_match_all()
- 25. Comportement étrange de RecyclerView
- 26. Comportement étrange de dispatch_get_main_queue
- 27. comportement étrange de requête
- 28. Comportement étrange de UILabel
- 29. Comportement étrange de javascript
- 30. Comportement étrange de getDefinitionByName
http://unix.stackexchange.com/? – eis
Que faire si vous essayez '[-d fichier] && echo" oui "'? – fedorqui
Quel système d'exploitation/version? Fonctionne pour moi sur osx 10.7.5 – SheetJS