Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Idiom



On Mon, Jul 14, 2008 at 05:34:05PM -0400, Jaime Vargas wrote:
> Is there a better way to setup the ${mask_octects} array?
> Without the back-ticks the expression constructs an array of one element.
>
> -- Jaime
>
> #!/bin/zsh
> declare -A cidr_to_mask
> cidr_to_mask=(
>   16    255.255.0.0
>   17    255.255.128.0
>   18    255.255.192.0
>   19    255.255.224.0
>   20    255.255.240.0
>   21    255.255.248.0
>   22    255.255.252.0
>   23    255.255.254.0
>   24    255.255.255.0
>   25    255.255.255.128
>   26    255.255.255.192
>   27    255.255.255.224
>   28    255.255.255.240
>   29    255.255.255.248
>   30    255.255.255.252
>   31    255.255.255.254
>   32    255.255.255.255
> )
>
> set -A mask_octects `echo ${cidr_to_mask[22]//./ }`

Maybe something like:

set-mask_octects() {
  local mask
  (( mask = (2 ** $1 - 1) << (32 - $1)))
  mask_octects=()
  repeat 4 {
    mask_octects=($((mask & 255)) $mask_octects)
    (( mask = mask >> 8 ))
  }
  return 0
}

-- 
Stéphane



Messages sorted by: Reverse Date, Date, Thread, Author