* Shell variable tables:setting value for elemet 1 overwrites element 0 @ 2005-05-25 10:55 wojciech.szenajch 2005-05-25 11:40 ` Peter Stephenson 0 siblings, 1 reply; 5+ messages in thread From: wojciech.szenajch @ 2005-05-25 10:55 UTC (permalink / raw) To: zsh-workers Hi, I did the following test for AIX 4.3.3/5.2 ksh, Linux: bash, and pdksh: $ TB[0]=zero $ TB[1]=one $ echo ${TB[0]} zero $ echo ${TB[1]} one For zsh 4.2.0 (SuSE 9.1, Red Hat ES 4.0) I did the following: $ zsh --version zsh 4.2.0 (i386-suse-linux) or zsh 4.2.0 (i386-redhat-linux-gnu) $ zsh $ TB[0]=zero $ echo ${TB[0]} zero <-------------------------------- correct result $ TB[1]=one $ echo ${TB[0]} one <-------------------------------- incorrect result $ echo ${TB[1]} one Best Regards Wojciech Szenajch ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Shell variable tables:setting value for elemet 1 overwrites element 0 2005-05-25 10:55 Shell variable tables:setting value for elemet 1 overwrites element 0 wojciech.szenajch @ 2005-05-25 11:40 ` Peter Stephenson 0 siblings, 0 replies; 5+ messages in thread From: Peter Stephenson @ 2005-05-25 11:40 UTC (permalink / raw) To: zsh-workers, pws wojciech.szenajch@bull.com.pl wrote: > $ zsh --version > zsh 4.2.0 (i386-suse-linux) or zsh 4.2.0 (i386-redhat-linux-gnu) > $ zsh > $ TB[0]=zero > $ echo ${TB[0]} > zero <-------------------------------- correct result > $ TB[1]=one > $ echo ${TB[0]} > one <-------------------------------- incorrect result > $ echo ${TB[1]} > one This is correct. "setopt ksh_arrays" or start up under the alias sh or ksh to get the other behaviour. -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. ********************************************************************** ^ permalink raw reply [flat|nested] 5+ messages in thread
[parent not found: <OFB8636392.BEFDACE9-ONC125700C.00408215@bull.com.pl>]
* Re: Shell variable tables:setting value for elemet 1 overwrites element 0 [not found] <OFB8636392.BEFDACE9-ONC125700C.00408215@bull.com.pl> @ 2005-05-25 12:05 ` Peter Stephenson 2005-05-25 14:48 ` Bart Schaefer 0 siblings, 1 reply; 5+ messages in thread From: Peter Stephenson @ 2005-05-25 12:05 UTC (permalink / raw) To: Zsh hackers list wojciech.szenajch@bull.com.pl wrote: > If this is the case, then any operation performed on element 0 should > return error message. This is misleading that operations like > TB[0]=zero; echo ${TB[0]} are accepted. Yes, it was probably the wrong decision to accept [0] in this case. I hope no one's relying on it, but you can't be sure. > I wonder why this zsh behaviour is kept, if all other popular shells number > arrays from 0. The array feature was originally based around csh rather than ksh. Accepting 0 as an alias for 1 dates from this time, I think. -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. ********************************************************************** ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Shell variable tables:setting value for elemet 1 overwrites element 0 2005-05-25 12:05 ` Peter Stephenson @ 2005-05-25 14:48 ` Bart Schaefer 2005-05-27 11:47 ` Peter Stephenson 0 siblings, 1 reply; 5+ messages in thread From: Bart Schaefer @ 2005-05-25 14:48 UTC (permalink / raw) To: Zsh hackers list On May 25, 1:05pm, Peter Stephenson wrote: } Subject: Re: Shell variable tables:setting value for elemet 1 overwrites e } } wojciech.szenajch@bull.com.pl wrote: } > If this is the case, then any operation performed on element 0 should } > return error message. This is misleading that operations like } > TB[0]=zero; echo ${TB[0]} are accepted. } } Yes, it was probably the wrong decision to accept [0] in this case. } I hope no one's relying on it, but you can't be sure. I don't think there's any reason to allow *assignment* to index zero, except perhaps as a way to accomplish array=(newelement $array). The dereference of $array[0] is a different matter. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Shell variable tables:setting value for elemet 1 overwrites element 0 2005-05-25 14:48 ` Bart Schaefer @ 2005-05-27 11:47 ` Peter Stephenson 0 siblings, 0 replies; 5+ messages in thread From: Peter Stephenson @ 2005-05-27 11:47 UTC (permalink / raw) To: Zsh hackers list Bart Schaefer wrote: > On May 25, 1:05pm, Peter Stephenson wrote: > } Subject: Re: Shell variable tables:setting value for elemet 1 overwrites e > } > } wojciech.szenajch@bull.com.pl wrote: > } > If this is the case, then any operation performed on element 0 should > } > return error message. This is misleading that operations like > } > TB[0]=zero; echo ${TB[0]} are accepted. > } > } Yes, it was probably the wrong decision to accept [0] in this case. > } I hope no one's relying on it, but you can't be sure. > > I don't think there's any reason to allow *assignment* to index zero, > except perhaps as a way to accomplish array=(newelement $array). The > dereference of $array[0] is a different matter. Unfortunately it doesn't seem to be that easy to change one but not the other; retrieving the index is fairly well buried. Extra flags could do this but the proliferation of getvalue() and fetchvalue() in the code makes it rather messy to test for failure in all the right places. Also, getindex(), which would have to perform the test, is called multiple times deep inside the code. Generally, the whole structure of the code is wrong to be able to solve this sort of problem simply. The current logic is to try something involving a deep hierarchy of code, and if it fails, try something else. Handling error cases systematically in code like this is very difficult. There is actually a good reason for the structure, however, namely a horrendous degree of context sensitivity in subscripts... if $foo exists and is an array or scalar, foo[0]=bar should fail; if foo exists but is a hash it should succeed; if foo doesn't exist, it needs to be created as an array but this should fail when the assignment is made. And so on. I don't think this comes as a great surprise. -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. ********************************************************************** ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-05-27 11:47 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2005-05-25 10:55 Shell variable tables:setting value for elemet 1 overwrites element 0 wojciech.szenajch 2005-05-25 11:40 ` Peter Stephenson [not found] <OFB8636392.BEFDACE9-ONC125700C.00408215@bull.com.pl> 2005-05-25 12:05 ` Peter Stephenson 2005-05-25 14:48 ` Bart Schaefer 2005-05-27 11:47 ` Peter Stephenson
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).