Shell
/bin/dash: 檢查 $1 是否為數字
檢查 $1 是否是 /bin/dash 中的整數的最佳方法是什麼?
在 bash 中,我可以這樣做:
[[ $1 =~ ^([0-9]+)$ ]]
但這似乎不符合 POSIX,並且 dash 不支持
以下檢測整數,正數或負數,並在
dash
POSIX 下工作:選項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
, ,zsh
POSIX還是( “Bourne shell 的重新實現” ) ; 該構造是最廣泛可用和最可靠的:sh``posh
sh``case
case $1 in (*[!0-9]*|"") false ;; (*) true ;; esac