将 bash 函数的返回值计算为整数

use*_*369 5 testing bash comparison return function

我一直在尝试编写一个 bash 函数来检查变量是否是整数。下面脚本中的 is_number 函数执行此检查。

当我运行它时(测试值为 1234),我收到以下错误消息:

./test_n2.sh: line 13: [: Checking 1234
1234: integer expression expected
n is not an integrer
Run Code Online (Sandbox Code Playgroud)

我很困惑:该函数返回 $?,在我使用 grep 进行的单行测试中,它的整数值被正确设置为 0。主块中的整数比较是通过 [ "$retval" -eq 0 ] 完成的,据我所知,这是测试整数的正确形式。

有人可以帮忙吗?

TIA。

#!/usr/bin/env bash

function is_number {
    number=$1
    echo "Checking $number"
    echo $number | /bin/egrep '^[0-9]+$'    
    return $?
}

n=1234
retval=`is_number $n`

if [ "$retval" -eq 0 ]; then
    echo n is an integer
    exit 0
fi

echo n is not an integrer
exit 1
Run Code Online (Sandbox Code Playgroud)

Bar*_*mar 4

当您使用反引号或分配变量时$(...),它会获取命令的标准输出。命令的返回值放在变量中$?。所以你应该这样做:

is_number $n
retval=$?
Run Code Online (Sandbox Code Playgroud)

或者你可以简单地写:

if is_number $n; then
    echo n is an integer
    exit 0
fi
Run Code Online (Sandbox Code Playgroud)