Hello, I observed today that a bash feature that used to work in version 3.00.16(1) no longer works in version 3.2.25(1). I have observed the bug on OpenSolaris snv_81 and Ubuntu 7.10 both of which run the same version 3.2.25(1).
In short the bug is the result of failure to expand the subscript of an array if the subscript is a variable. The following script should return a list of files with a preceding (File <#>: ). However, it does not work that way because the integer variable (${d}) used in the subscript of the array statement (FileList[${d}]=${File}) does not get properly expanded. #!/bin/bash declare -a FileList=('') declare -i d=0 ls -1| while read File do FileList[${d}]=${File} d=$((10#${d}+1)) done d=0 while [[ ${d} -lt "${#FileList[*]}" ]] do echo "File ${d}: ${FileList[${d}]}" d=$((10#${d} + 1)) done I have found that this script works just fine with korn shell (ksh) and bash version 3.00.16(1). Just not bash 3.2.25(1). When I reviewed the COMPAT and CHANGES files, the only items that looked remotely close to the problem that I have encountered are the following: bash-3.0-alpha/bash3.0-beta1: l. When performing a compound array assignment, the parser doesn't treat words of the form [index]=value as assignments if they're the result of expansions. bash-2.05b-alpha1/bash-2.05a-release: jj. Array subscript expansion now takes place even when the array variable is unset, so side effects will take place. If I was a programmer, I would try to propose a fix but alas I am not. The best I can do is provide a re-producible use case. References: http://tiswww.case.edu/php/chet/bash/COMPAT http://tiswww.case.edu/php/chet/bash/CHANGES Thanks in advance, Brad -- The Zone Manager http://TheZoneManager.COM http://opensolaris.org/os/project/zonemgr