Sida 1 av 1

Konstigt beteende med bash arrayer --- kan någon förklara?

Postat: 30 nov 2007, 11:19
av mcNisse
Jag hittade ett konstigt beteenda med arrayer.

Jag skapar tre filer, en med ett mellanslag. Sedan vill jag lägga in dem i en array och loopa över dem. Rätt sätt att lösa problemet finns i progammeringstråden. Det jag undrar är vad och varför jag får den i mitt tycke konstiga utskriften...

Så här gör jag

Kod: Markera allt

mkdir slask
cd slask
touch foo bar "foo bar"
f=$(ls -Q)

Kod: Markera allt

echo $f
ger

Kod: Markera allt

"bar" "foo" "foo bar"
Inget konstigt.
Använder jag operatorn för att matcha alla element blir det konsigt...

Kod: Markera allt

echo ${f[*]}
ger

Kod: Markera allt

"bar" "foo" "foo bar" "foo" "foo bar"
Hur kommer det sig att foo och "foo bar" listas två gånger?

Det borde ha något med att jag gör något fel när jag skapar arrayen, men vad?
För detta ger "rätt" svar

Kod: Markera allt

f=($(ls -Q))
echo ${f[*]}
"bar" "foo" "foo bar"

SV: Konstigt beteende med bash arrayer --- kan någon förklara?

Postat: 30 nov 2007, 13:03
av zero gravity
Jag lyckas inte upprepa ditt problem:

Kod: Markera allt

mkdir slask
cd slask/
touch foo bar "foo bar"

f=$(ls -Q)
echo $f
"bar" "foo" "foo bar"

echo ${f[*]}
"bar" "foo" "foo bar"


SV: Konstigt beteende med bash arrayer --- kan någon förklara?

Postat: 30 nov 2007, 13:30
av mcNisse
Konstigt.. eller bra. Jag tycker det beteende som uppvisas på min maskin liknar en bug.

Kan det vara att vi kör olika versioner av bash? Jag kör feisty fawn.
bash --version
GNU bash, version 3.2.13(1)-release (i486-pc-linux-gnu)

SV: Konstigt beteende med bash arrayer --- kan någon förklara?

Postat: 30 nov 2007, 18:01
av zero gravity
bash --version
GNU bash, version 3.2.25(1)-release (i686-pc-linux-gnu)