使用expr时出现语法错误

时间:2015-10-31 16:05:29

标签: bash expr

以下是代码:

#!/bin/bash
reg='[0-9]{1}-[0-9]{2}-[0-9]{6}-[0-9Xx]{1}'
while read ISBN; do
    if [[ $ISBN =~ '$$$' ]]; then
        exit 0
    else
        if [[ $ISBN =~ $reg ]]; then
            ISBN=${ISBN//-/}
            let sum=0
            let k=11
            for index in `seq 1 10`; do
                array[$index]=`echo $ISBN | cut -c"$index"`
                k=$(expr $k - $index)
                n=$(expr $k * ${array[$index]})
                sum=$(expr $sum + $n)
                echo $sum
            done
            #do something
        else
            echo Invaild
        fi
    fi
done

我的意见:

0-00-000001-1

错误:

expr: syntax error
expr: syntax error

但是当我在终端中运行expr时如下:

k=11
index=1
echo $(expr $k - $index)

效果很好。你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:2)

使用expr,您需要转义*以避免将其扩展为文件glob:

n=$(expr $k \* ${array[$index]})

使用算术表达式,这不是问题:

n=$(( $k * ${array[$index]} ))