Shell

/bin/dash: 檢查 $1 是否為數字

  • June 22, 2018

檢查 $1 是否是 /bin/dash 中的整數的最佳方法是什麼?

在 bash 中,我可以這樣做:

[[ $1 =~ ^([0-9]+)$ ]]

但這似乎不符合 POSIX,並且 dash 不支持

以下檢測整數,正數或負數,並在dashPOSIX 下工作:

選項1

echo "$1" | grep -Eq '^[+-]?[0-9]+$' && echo "It's an integer"

選項 2

case "${1#[+-]}" in
   ''|*[!0-9]*)
       echo "Not an integer" ;;
   *)
       echo "Integer" ;;
esac

或者,稍微使用一下:(nop) 命令:

! case ${1#[+-]} in *[!0-9]*) :;; ?*) ! :;; esac && echo Integer

dash是 , bash, ksh, , zshPOSIX還是( “Bourne shell 的重新實現” ) ; 該構造是最廣泛可用和最可靠的:sh``posh sh``case

case $1 in (*[!0-9]*|"") false ;; (*) true ;; esac

引用自:https://unix.stackexchange.com/questions/198236