我使用这个简单的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 ]
}
答案 0 :(得分:1)
我们需要在zsh中使用${=specs}
语法,如下所示:
local IFS=.
if [[ -n ${ZSH_VERSION-} ]]; then
set -- ${=1}
else
set -- ${1}
fi
根据zsh手册,似乎zsh不像bash那样扩展参数:
$ {=规格}
[...剪断...]
这会强制参数扩展在替换之前被拆分为单独的单词,使用IFS作为分隔符。默认情况下,这在大多数其他shell中都已完成。