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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 :
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




PS : j'ai testé sous SUN8, même résultat.