[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: