[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] [Bash] test om filer eksisterer i en for loop



Hej,

On 10:04 Fri 11 Jul 2008, Lars Bengtsson wrote:
> Hej
> 
> On Thu, 10 Jul 2008 23:15:14 +0200, Anders Thøgersen wrote:
> > Hej,
> > 
> > On 20:47 Thu 10 Jul 2008, Sune Vuorela wrote:
> >> On 2008-07-10, Anders Thøgersen <sslug@sslug> wrote:
> >> > Hej,
> >> >
> >> > Hvorfor fungerer dette ikke:
> >> >
> >> > 	foo() { \ls -1 $HOME; }
> 
> Det er en dårlig ide generelt at bruge /bin/ls  i scripts, da outputet 
> ikke er formateret til at bruges i scripts. Desuden er det nemmere og mere
> effektivt at bruge 'globing':
> 
> 	for i in $HOME/* ; do ...
> 
> Man skal så lige være opmærksom på om shell option 'noglob' er off, det 
> er den dog per default. Det slås fra med 'set +o noglob' i bash (default)
> 
> >> > 	
> >> > 	for i in $(foo); do
> >> > 	  [[ -e $i ]] && echo $i
> >> > 	done
> >> >
> >> > Jeg forstår det ikke...  Hvis jeg skriver:
> >> >
> >> > 	for i in $(foo); do
> >> > 	  echo $i
> >> > 	done
> >> >
> >> > Så sker der det jeg forventer,.. hmmm, er der nogen der kan hjælpe
> >> > mig?
> 
> Det virker på min bash 3.2.39(1)-release (ses med 'echo $BASH_VERSION').
> Ved at bruge ", altså skrive [[ -e "$i" ]] ... så håndteres mellemrum og 
> linjeskift i filnavne korrekt, det kan være årsagen, selvom i den bash 
> version jeg har fandt den alligevel filer med mellemrum i navnet. 

ikke hos mig. Jeg bruger bash 3.1.17(1)-release, måske en forskel.

> >> 
> >> Hvor står du henne når du skriver det?
> > 
> > I mit hjemme dir.
> > 
> >> Og hvad er det for noget med [[ ]]?
> >> Og den der \ foran ls ?
> > 
> > [[ ]] er ganske almindelig kort syntax. [[ ... ]] || echo "hallo", fx.
> 
> Det er den "nye" conditional i bash, den kom vist i version 3, som har en 
> lidt anden syntax og flere funktioner, fx [[ "$i" =~ txt ]] matcher på 
> regulære udtryk som i regex(3)
> 
> > 
> > \ foran ls betyder at jeg vil eksekvere ls udenom det alias jeg har
> > defineret for ls, dvs /bin/ls.
> > 
> >> Jeg gjorde lige:
> >> 
> >> foo() { ls -1 $HOME }
> >> for i in $(foo)
> >> do
> >> 	[ -e $i ] && echo $i
> >> done
> >> 
> >> og jeg fik listen af emner der var fælles for pwd og $HOME
> >> 
> >> Og tilmed virker det hvis /bin/sh ikke nødvendigvis er bash.
> > 
> > Det er godt at høre at det virker for dig!  Jeg var overbevist om at det
> > jeg skrev ikke er helt vanvittigt.  Måske har jeg en mærkelig shell
> > setting?  Jeg kan fx. ikke definere foo() ovenover som du gør uden at
> > sætte semikolon efter $HOME.  Hvis jeg gør det så vises "continuation"
> > prompten.
> 
> Det er heller ikke lovlig syntax i bash eller sh, men jeg så det virkede 
> i zsh :)
> 
> > 
> > Enkel kantet parantes som du bruger virker på samme måde hos mig, men
> > jeg synes at kunne huske noget om at det er bedre at bruge [[ ]].
> 
> Personligt kan jeg bedre lide syntaxen i [[, da den er mere C-agtig. 
> Men som Sune skriver så er det ikke shell uafhængigt. Men er understøttet i 
> ksh, zsh og bash. Men ikke i sh og dash. Så man skal ikke bruge det i system 
> scripts.

Jeg har konstateret at det virker fint på en anden maskine, som du også
skriver det gør for dig, så jeg vil prøve at gå igennem min bashrc, og
se om der er noget anderledes.

Mvh.
Anders



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2008-08-01, 02:01 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *