Avatar billede Max Novice
08. marts 2007 - 10:25 Der er 1 kommentar og
1 løsning

Bash, arrays og white space

Hej alle.

Nu står jeg med et lidt underligt problem igen.

Jeg er ved at lave et script, som skal kunne håndtere et array, som er oprettet med output data fra et andet program. Sagen er desværre, at disse data indeholder (kan indeholde..) mellemrum, hvilket giver mig lidt problemet med at få adskildt disse data korrekt. Her er et stykke af koden:

...
full_list=`<kommando som outputter listen>`
for element in $full_list
do
  echo $element
  element_list=$element_list"`basename $element .zip` "
  echo $element_list
  echo ---
done
...

Et eksempel på hvordan et element kunne se ud:

/home/not_home/pakker/ikke helt godt nok.zip

Der er desværre ikke nogen mulighed for at ændre på hverken output fra kommandoen, som opretter listen, eller ændre filnavnet. Det, der giver mig håb er, at hvis man kører kommandoen, som outputter den famøse liste, ser det således ud:

/home/not_home/pakker/a.zip
/home/not_home/pakker/fint_nok.zip
/home/not_home/pakker/ikke helt godt nok.zip
/home/not_home/pakker/slet ikke godt.zip
/home/not_home/pakker/z.zip

Det vil sige, at outputtet som sådan er i orden, men problemet ligger i for..in-sætningen.

Er der en måde at få dataene opdelt korrekt på? Det behøver ikke nødvendigvis at være noget med en for-løkke, men jeg skal kunne tilgå de enkelte elementer ét ad gangen.

Håber I kan hjælpe.

Mvh.
Avatar billede Max Novice
08. marts 2007 - 11:27 #1
Fandt ud af det. En lidt bøvlet metode, men den virker efter hensigten. :)

full_list=`<kommando som outputter listen> | tr " " "\~"`
for element in $full_list
do
  element=${element//"~"/" "}
  echo $element
  element_list=$element_list"`basename \"$element\" .vmx` "
  echo $element_list
  echo ---
done
Avatar billede Max Novice
08. marts 2007 - 11:28 #2
.. hvor .vmx selvfølgelig er .zip

;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester