← Back to team overview

sslug-teknik team mailing list archive

RE: Bash-mystik - eller er det xview der driller ?

 

> 
> > fra find(1):
> > 
> > -print0
> >     True; print the full file name on the standard
> > output,  followed
> >     by  a  null  character  (instead  of  the
> > newline character that
> >     `-print' uses).  This allows file names that
> 
> OK, jeg begynder at se den fordrejede logik bag det
> her. Jeg kørte nedenstående
> 
>   PARAMS=`for image in *.jpg; do echo \"$image\";
> done`
> 
>   echo "Liste-udgave"
>   echo "$PARAMS"
>   echo
> 
>   echo "One-liner udgave"
>   echo $PARAMS
>   echo
> 
> og får følgende output
> 
>   Liste-udgave
>   "01 jan.jpg"
>   "02 feb.jpg"
> 
>   One-liner udgave
>   "01 jan.jpg" "02 feb.jpg"
> 
> så `cmd` returnerede noget ganske andet end jeg naivt
> forventede. OK, for at være sikker på at have en ren
> tekststreng i min variabel gjorde jeg dette:
> 
>   $ PARAMS1="\"01 jan.jpg\""
>   $ PARAMS2="\"02 feb.jpg\""
>   $ PARAMS="$PARAMS1 $PARAMS2"
>   $ echo $PARAMS
>   "01 jan.jpg" "02 feb.jpg"
> 
> men jeg kan stadig ikke bruge den simpelt med en anden
> kommando:
> 
>   $ ls -l $PARAMS
>   /bin/ls: "01: No such file or directory
>   /bin/ls: jan.jpg": No such file or directory
>   /bin/ls: "02: No such file or directory
>   /bin/ls: feb.jpg": No such file or directory
> 
>   $ ls -l "$PARAMS"
>   /bin/ls: "01 jan.jpg" "02 feb.jpg": No such file or
> directory
> 
> Det eneste der virker er 
> 
>   $ echo $PARAMS | xargs ls -l
>   -rw-r--r--  1 vmware users 0 2005-12-01 18:45 01
> jan.jpg
>   -rw-r--r--  1 vmware users 0 2005-12-01 18:45 02
> feb.jpg
> 
> Så dobbelt-pingede navne bliver altså opfattet vidt
> forskelligt afhængigt af hvordan man lige sender dem
> rundt. Nogle gange synes bash at ting inde i
> dobbelt-pinger skal sendes direkte videre og andre
> gange fortolker den og deler op på mellemrum uagtet at
> navnene er beskyttet af dobbelt-pinger.
> 
> Det kan godt være at det er konsistent opførsel, men
> det er altså dybt ulogisk. Er der nogen der kan give
> en logisk sammenhængende forklaring på bash's opførsel
> ? Eller er svaret bare: Skriv alle dine scripts i
> Python :-) ?
> 
> Mvh
> -- Jan Holst
> 
> 
> 		
> __________________________________ 
> Yahoo! Music Unlimited 
> Access over 1 million songs. Try it free. 
> http://music.yahoo.com/unlimited/
> 
> 
> 

Lidt mere til det med dobbeltpinger m.m.


Scriptet:

XVIEW=""
echo $XVIEWW
for image in *.jpg
do
  XVIEW="${XVIEW} \"${image}\""
  echo $XVIEW
done
ls ${XVIEW} 

Resultat med en sh -x:

+ XVIEW=
+ echo

+ XVIEW= "fil 2.jpg"
+ echo '"fil' '2.jpg"'
"fil 2.jpg"
+ XVIEW= "fil 2.jpg" "fil1.jpg"
+ echo '"fil' '2.jpg"' '"fil1.jpg"'
"fil 2.jpg" "fil1.jpg"
+ XVIEW= "fil 2.jpg" "fil1.jpg" "fil3 .jpg"
+ echo '"fil' '2.jpg"' '"fil1.jpg"' '"fil3' '.jpg"'
"fil 2.jpg" "fil1.jpg" "fil3 .jpg"
+ ls '"fil' '2.jpg"' '"fil1.jpg"' '"fil3' '.jpg"'
ls: "fil: Ingen sådan fil eller filkatalog
ls: 2.jpg": Ingen sådan fil eller filkatalog
ls: "fil1.jpg": Ingen sådan fil eller filkatalog
ls: "fil3: Ingen sådan fil eller filkatalog
ls: .jpg": Ingen sådan fil eller filkatalog 


Læg mærke til at tegnet ' kommer ind flere steder.
Dette både når det er echo og ls.

Observeret med ksh, bash & csh på Linux (32/64 bit),
Sun Solaris 8 (Sparc/Intel) og System V Release 4.2 (Supermax).


Konklusionen vil jeg lade være op til de enkelte, men jeg vil 
personligt undlade at bruge mellemrum i filnavn.


PS.

Det hjælper ikke at udskift \" med ' i scriptet.


Dette er resultatet hvis man gør det:

+ XVIEW=
+ echo

+ XVIEW= 'fil 2.jpg'
+ echo ''\''fil' '2.jpg'\'''
'fil 2.jpg'
+ XVIEW= 'fil 2.jpg' 'fil1.jpg'
+ echo ''\''fil' '2.jpg'\''' ''\''fil1.jpg'\'''
'fil 2.jpg' 'fil1.jpg'
+ XVIEW= 'fil 2.jpg' 'fil1.jpg' 'fil3 .jpg'
+ echo ''\''fil' '2.jpg'\''' ''\''fil1.jpg'\''' ''\''fil3' '.jpg'\'''
'fil 2.jpg' 'fil1.jpg' 'fil3 .jpg'
+ ls ''\''fil' '2.jpg'\''' ''\''fil1.jpg'\''' ''\''fil3' '.jpg'\'''
ls: 'fil: Ingen sådan fil eller filkatalog
ls: 2.jpg': Ingen sådan fil eller filkatalog
ls: 'fil1.jpg': Ingen sådan fil eller filkatalog
ls: 'fil3: Ingen sådan fil eller filkatalog
ls: .jpg': Ingen sådan fil eller filkatalog 

 
Med venlig hilsen / Regards
 
Frank Larsen
Kimik IT A/S
PO Box 740
3900 Nuuk
Greenland
Mail : support@xxxxxxxxxxx
Phone: +299 34 20 00
Fax  : +299 34 20 01
Skype: larsen_frank


Follow ups