![](/img/trans.png)
[英]Why does this one-line function work in zsh but not bash, and how can I fix it for bash?
[英]bash function does not work in zsh env
當我使用source checkip.sh && isvalidip 127.0.0.1 && echo $?
時,我已經使用了這個簡單的bash函數來檢查ip是否有效並且可以正常工作source checkip.sh && isvalidip 127.0.0.1 && echo $?
在bash環境中 但是當我在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 ]
}
我們需要在zsh中使用${=specs}
語法,如下所示:
local IFS=.
if [[ -n ${ZSH_VERSION-} ]]; then
set -- ${=1}
else
set -- ${1}
fi
根據zsh手冊,zsh似乎不像bash那樣在此處擴展參數:
$ {=規范}
[...略...]
使用IFS作為定界符,這會強制在替換之前將參數擴展拆分為單獨的單詞。 默認情況下,在大多數其他shell中都可以完成此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.