From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id 29cfe880 for ; Sat, 9 Nov 2019 07:51:38 +0000 (UTC) Received: (qmail 12228 invoked by alias); 9 Nov 2019 07:51:31 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: List-Unsubscribe: X-Seq: 24411 Received: (qmail 29115 invoked by uid 1010); 9 Nov 2019 07:51:31 -0000 X-Qmail-Scanner-Diagnostics: from mail-il1-f171.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.102.0/25622. spamassassin: 3.4.2. Clear:RC:0(209.85.166.171):SA:0(-2.0/5.0):. Processed in 1.857367 secs); 09 Nov 2019 07:51:31 -0000 X-Envelope-From: roman.perepelitsa@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.166.171 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=v30dGqxIkflj3N2HAJyELFZAGgJjmGps4Oe7enGRKFM=; b=sSllgyAHUpVb51f4tcXM3VeNjulP0tI+UGbb4u+1yPpU8NqixJcXzo5n1xbuj8eOna faOh05fNDXAL3unPAhkumV6iEZW+p4xTto4aFzPsY4lkGpGgzwl8DMclgmwwpm0kfNxQ PswcwJXR/VhHwaBBD1Uwolxz9UX2MEH5atdtzYnI6d1R98wvxxdsFPvp0OUH9+KNFQRu ISErRLFdtXpnC4oYmQlpoJmuh/A8bLY55QHZH3WoO05+n5nV+fKvvZCxi0UFseHMTPlB vqkNtLap/JoEj/4LMf51QrU179jEw493K6+Frafdykei1LCiWhXd/s0m+09qXz0I6jBU Y1uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=v30dGqxIkflj3N2HAJyELFZAGgJjmGps4Oe7enGRKFM=; b=WYnXZk4SpRKJUGl/aT87MJBhlLXjfG4FNnxwUQevR+h8VqaEy9gnHUn20VVELWZ9ib Kw21Dgo3CBJ3tmtPAnVThVkj4tPHczLKUUHhFoozXVmsA+LaZN0pIIy6vsw7+u3gIaHm 6BYXm0p9cptcCyy02HU2pW3fEQ2XQiPtFgNBzW2yhW5lb03rZOmL1R2suTNi/BzBUjxu x2MG/EVZZq2K//x1sW5GgueKLMumEx49KhwECeD1PzYICgIlkW8JqPzNjNb6CA2GS6jt d6nVi1n2VXaybWSHbUFk20KJRycTQEHoAjc+V3poShoYsrt6OGH57kzoZJ1uYBgU1pyr KfXw== X-Gm-Message-State: APjAAAVOdA2xeTHEr6Uea//BKAivU4gP5VuM3lErF/Uc3QQSMOSu61js GI/DBZ6bDtImVQjMNXSPv3DleGNTvHyXdFs533w= X-Google-Smtp-Source: APXvYqwoxvl7ForZgRT2LFTG5l3JJL0g2C/aPRrK+4yqvUzUZHx+dkrvUapC225a2eLA8JMv9rVKpcQPsBh3HYXujtE= X-Received: by 2002:a92:381c:: with SMTP id f28mr18081797ila.169.1573285856968; Fri, 08 Nov 2019 23:50:56 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Roman Perepelitsa Date: Sat, 9 Nov 2019 08:50:46 +0100 Message-ID: Subject: Re: What's the reasoning behind z & s returning nular for empty input? To: Sebastian Gniazdowski Cc: Zsh Users Content-Type: text/plain; charset="UTF-8" On Sat, Nov 9, 2019 at 8:27 AM Sebastian Gniazdowski wrote: > > Hi > arr=( "${(s:,:):-}" ) > print -r ${#arr} ${(q)arr} > Output: 1 '' This makes sense. Consider how many elements we should get when splitting a string on commas: split ",,," => 4 elements split ",," => 3 elements split "," => 2 elements split "" => ??? The last split could give either 1 element or 0. The former is consistent with the rest, the latter is not. > arr=( "${(z):-}" ) > print -r ${#arr} ${(q)arr} > Output: 1 '' This is a bug IMO. Let's again consider how many elements we should get when tokenizing different strings: tokenize "a a a a" => 4 elements tokenize "a a a" => 3 elements tokenize "a a" => 2 elements tokenize "a" => 1 element tokenize "" => ??? Consistency requires that the last line gives zero elements. If it gave one empty element, it would be the only case where (z) can produce empty elements. Here's another way to put it. For any array x, "${(@z)${(j::)${(@q)x}}}" expands to "${(@q)x}", except when x is empty. The special case is an inconsistency. Roman.