From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17616 invoked by alias); 20 Nov 2015 05:17:07 -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: X-Seq: 20972 Received: (qmail 15851 invoked from network); 20 Nov 2015 05:17:07 -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,FREEMAIL_FROM, T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=uggCyAkpkKFtk1vxJNRzAbZZqZrvQcCRyXY6Smm0SBM=; b=GZbqnkKjbqp5RJJ64ec52Og5a27zs3LNBPI7HHqJp0aSF/eOdOQBN64yXBcQWuTDeV udJIs8nT+ROIjADGrp4VWDmvD4cGpceo5VXUHkKJVR3gk7+hLRuyAv6gLqg35YhMY6fK mC1lBMxc7otT7PTXClG+eSKFcEFDGTKWh2D+OgidlFoboLcuxFPLQxIyv4pZTHm2pn1S OmrNOXPsuIRmBv2UgQHRDEGr5NdJG6mxxfp/0Kqu3JDphwcYqqCoWyHWc0r8B8QSsQOX VLp1aPW3ySWPopnILlJ4qacxfGoGTsjA9gIt3WKiiXeGDetakS/cfmDQyN5WNl00Ayhj j6sQ== X-Received: by 10.182.153.226 with SMTP id vj2mr7378901obb.61.1447996623267; Thu, 19 Nov 2015 21:17:03 -0800 (PST) Date: Thu, 19 Nov 2015 23:17:01 -0600 From: Matthew Martin To: TJ Luoma Cc: zsh-users@zsh.org Subject: Re: Version String Comparison Message-ID: <20151120051701.GA18570@CptOrmolo.darkstar> References: <9A09EF7C-A81B-4ED9-A266-C6A53BC98167@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <9A09EF7C-A81B-4ED9-A266-C6A53BC98167@gmail.com> User-Agent: Mutt/1.5.24 (2015-08-30) On Thu, Nov 19, 2015 at 05:16:08PM -0500, TJ Luoma wrote: > > I am looking for a zsh way to compare version numbers, which is smart enough > to know that, for example > > "6.7.0.36" is less than "6.7.0.0044" vercomp() { [ "$1" = "$2" ] && return [ "${1%%.*}" -gt "${2%%.*}" ] && return 1 [ "${1%%.*}" -lt "${2%%.*}" ] && return 2 vercomp "${1#*.}" "${2#*.}" } % vercomp 3 4; echo $? 2 % vercomp 1 1; echo $? 0 % vercomp 6.7.0.36 6.7.0.0044; echo $? 2 Salt to taste for return values and beta handling (and note no error handling is done).