bash函数在zsh环境中不起作用

时间:2015-02-19 17:53:34

标签: bash shell zsh

我使用这个简单的bash函数来检查ip是否有效,并且当我在bash环境中使用source checkip.sh && isvalidip 127.0.0.1 && echo $?时它工作正常。但是当我在zsh环境中并且总是返回无效时,同样的事情不起作用($?== 1)。

知道怎样才能让它在zsh中运行? (我想在shell env中使用它作为函数)

#!/bin/bash 
isvalidip(){                                                                         
 case $1 in                                                             
     "" | *[!0-9.]* | *[!0-9]) return 1 ;;                              
 esac                                                                   

 local IFS=.                                                           
 set -- $1                                                              

 [ "$#" -eq 4 ] && [ ${1:-666} -le 256 ] && [ ${2:-666} -le 256 ] \     
 && [ ${3:-666} -le 256 ] && [ ${4:-666} -le 256 ]                                                    
                                                                        } 

1 个答案:

答案 0 :(得分:1)

我们需要在zsh中使用${=specs}语法,如下所示:

local IFS=.
if [[ -n ${ZSH_VERSION-} ]]; then
  set -- ${=1}
else
  set -- ${1}
fi

根据zsh手册,似乎zsh不像bash那样扩展参数:

  

$ {=规格}

     

[...剪断...]
  这会强制参数扩展在替换之前被拆分为单独的单词,使用IFS作为分隔符。默认情况下,这在大多数其他shell中都已完成。

     

- zshexpn(1) 14.3 Parameter Expansion