← 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/


Follow ups

References