From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16863 invoked by alias); 2 Jan 2016 03:27:20 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 37484 Received: (qmail 891 invoked from network); 2 Jan 2016 03:27:19 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.0 Message-ID: <56874393.1010001@inlv.org> Date: Sat, 02 Jan 2016 04:27:15 +0100 From: Martijn Dekker User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:31.0) Gecko/20100101 Thunderbird/31.2.0 MIME-Version: 1.0 To: zsh-workers@zsh.org Subject: [BUG] functions can't create global readonly variables Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit It is apparently impossible to create global readonly variables from within a function. If a variable is created with a command like readonly var=value then the entire variable gets a function-local scope, as if 'local' were used. If a global variable is set first, then set to readonly with 'readonly' or 'typeset -r', then the read-only attribute only lasts within the function, and the global variable remains read/write. I don't know if this is intended behaviour for native zsh mode; the 'zshbuiltins' man page does not mention anything about this. But it is certainly a bug for POSIX/'emulate sh' mode. Steps to reproduce: $ fn() { readonly var=foo; var=bar; } $ fn fn: read-only variable: var $ echo $var $ var=writtento $ echo $var writtento $ fn() { var=foo; readonly var; var=bar; } $ fn fn: read-only variable: var $ echo $var foo $ var=writtento $ echo $var writtento Confirmed in zsh 4.1.1 through current. Thanks, - Martijn