Mémoriser le nombre de fichiers : question sur LET (sun OS)
Bonjour.
En voulant faire un script où j'avais besoin de mémoriser le nombre de fichiers contenu dans un dossier, je suis arrivé à une "bizarrerie" : LET n'accepte pas les substitutions de commandes avec $(...) :?
Le code exemple :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#!/bin/ksh
echo 'Sur la variable UNE : avec let et $(...)'
typeset -i UNE=0
let UNE=$(ls | wc -l)
echo "Elle vaut : ${UNE}"
echo 'Sur la variable DEUX : avec ((...))'
typeset -i DEUX=0
((DEUX=$(ls | wc -l)))
echo "Elle vaut : ${DEUX}"
echo 'Sur la variable TROIS : a linitialisation'
typeset -i TROIS=$(ls | wc -l)
echo "Elle vaut : ${TROIS}"
echo 'Sur la variable QUATRE : `...` '
typeset -i QUATRE=0
QUATRE=`ls | wc -l`
echo "Elle vaut : ${QUATRE}" |
J'exécute mon shell (dans un dossier où il y a deux fichiers) et j'ai le résultat suivant :
Citation:
Sur la variable UNE : avec let et $(...)
Elle vaut : 0
Sur la variable DEUX : avec ((...))
Elle vaut : 2
Sur la variable TROIS : a linitialisation
Elle vaut : 2
Sur la variable QUATRE : `...`
Elle vaut : 2
Je n'arrive pas à expliquer pourquoi la variable UNE ne vaut pas 2 en sortie... Seule explication : let n'accepte pas les substitutions avec $(commande). Mais pourquoi ?
En tapant man let, je n'ai rien eu des très concret :
Citation:
NAME
let - shell built-in function to evaluate one or more arith-
metic expressions
SYNOPSIS
ksh
let arg...
DESCRIPTION
ksh
Each arg is a separate "arithmetic expression" to be
evaluated.
EXIT STATUS
The following exit values are returned:
0 The value of the last expression is non-zero.
1 The value of the last expression is zero.
ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Availability | SUNWcsu |
|_____________________________|_____________________________|
SEE ALSO
ksh(1), set(1), typeset(1), attributes(5)
SunOS 5.10 Last change: 15 Apr 1994
Ce que j'ai mis en gras dans le man sous-entend-il qu'on ne peut avoir des "vraies" variables et des nombres en dur dans une expression avec let ?
Merci d'avance de vos réponses :ccool:
PS : j'ai testé sous SUN8, même résultat.