簡體   English   中英

bash函數在zsh env中不起作用

[英]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中都可以完成此操作。

zshexpn(1) 14.3參數擴展

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM