bash bug? declare array in alias

nem tudom ismeretes-e ez a bug:

[code]
## értékadás scalar változónak aliaszból
alias setvar='s=foobar;'
setvar
echo s=$s
# s=foobar
## test passed

## ugyenez több sorban több változónak
alias setvars='a=foo
b=bar;'
setvars
echo a=$a b=$b
# a=foo b=bar
## test passed

## értékadások plusz valami parancs
alias setvars='a=foo
b=bar
pwd;'
setvars
echo a=$a b=$b
# /tmp
# a=foo b=bar
## test passed

## értékadás tömbnek aliaszból
alias setarray='a=(q w e);'
setarray
echo a=${a[@]}
# a=q w e
## test passed

## értékadás tömbnek aliaszból plusz valami
alias setarray='a=(q w e)
pwd
'
setarray
echo a=${a[@]}
# a=pwd q w e
## test failed

## declare, értékadás plusz valami
alias setarray='declare -a t
t=(q w e)
pwd
asfasdf
'
setarray
echo t=${t[@]}
# t=pwd asfasdf q w e
## test failed
[/code]

nem a soremeléssel van a gond.
úgy tűnik, bármi ami "változó=(...)" után van, soremelést figyelmen kívül hagyva a tömb elejéhez fűzi.

Hozzászólások

Érdekes, köszi :) zsh-ban pl jónak tűnik.

nyos@hex:~$ alias setarray='a=(q w e);pwd'
nyos@hex:~$ setarray
/home/nyos
nyos@hex:~$ echo a=${a[@]}
a=q w e

--
Is that a banana in your pocket, or are you just happy to see me?
Neither, it's my new iPhone.

ezt értem inkonzisztencia alatt:


alias a='pwd
pwd;'
a
# kimenet:
# /tmp
# /tmp

ha behelyettetsítés alatt aliasz kibontást értesz, akkor se igaz, hogy az aliasz definícióban lévő LF-ből SP válna, hisz lefuttat két parancsot.


alias a='pwd
tomb=(1 2 3)
pwd;'
a
echo ${tomb[@]}
# kimenet:
# /tmp
# pwd 1 2 3

itt a 2. és azutáni LF-eket nem veszi parancs elválasztónak. ezt értem inkonzisztencia alatt.
ugyanakkor érdekes, hogy ha az aliasz elején van a tömbértékadás, akkor jó:


alias a='tomb=(1 2 3)
pwd;'
a
echo ${tomb[@]}
# kimenet:
# /tmp
# 1 2 3

~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack

Hát ez eléggé durva. Érteni egyelőre nem nagyon értem, hogy vajon hol tud ennyire eltévedni, vagy hogy mit is akar csinálni akkor, amikor a soremelést elkezdi valahogy másként értelmezni. (Persze a vicc kedvéért megnéztem Korn-shell alatt is. A pdksh és a ksh93 is ismeri a tömbváltozót, az újabb ksh93 már a bash-féle szintaxist is, a korábbiak és a pdksh csak a "set -A lo 1 2 3" formájút. Nem meglepő módon ezek a hibák azokban nincsenek meg, pont úgy működnek, ahogy elvárjuk tőlük. /off )