Re: giuro che smetto :-) (was Re: domanda rapida - stat())
* pbm [17 Sep 2002, 20:56 +0200]:
> > zsh% echo ${#${(@f)"$(ls -q *(.) .*(.))"}}
> > Meno di un processo penso sia infattibile :)
> e come no?
> echo ${#${(@f)"$(echo *(.) .*(.))"}}
Non c'avevo pensato... ma
Problema: i filename\nqualcosa
> e poi comunque la zsh e' squalificata all'antidoping... :P
=:> Grande!
* /dev/null [18 Sep 2002, 12:01 +0200]:
> > Cmq, si puo` non forkare, e basta una POSIX shell (o no? Roberto,
> > non mi ricordo piu` se alla fine veriabile++ era POSIX...):
"bash --posix" lo vede
> > $ b=0 ; for a in * .*; do let b++; done ; echo $b
> > e se vogliamo escludere le directory:
> > $ b=0 ; for a in * .*; do let b++; done ; for a in */ .*/; do let
> > b-- ; done ; echo $b
> Certo che sono idiota. E` sufficiente:
> $ set -- * .* ; echo $#
> per il numero di file + directory, e
> set -- */ .*/ ; echo $#
> per il numero di directory. Se si vuole fare la sottrazione, poi, si
> puo` usare $(( operazione )), che e` POSIX e non forka.
Interessante quest'ultima, anche se sballa con un filename del tipo "a a"
Invece sulla prima c'e` un problema che anche con la soluzione zsh salta
fuori... e se non ci sono file o directory?
echo * oppure echo */ stampano risp. * e */
Come fare? Forse un test su "$a" bisogna farlo per forza
b=0 ; for a in * .*; do [ -f "$a" ] && let b++; done
for a in */ .*/; do [ -d "$a" ] && let b-- ; done
echo $b
Ciao, Roberto
Reply to: