Bash脚本会增加变量,但会抛出错误

时间:2015-05-21 18:55:16

标签: linux bash shell

我试图以50为增量处理一些文件。它似乎有效,但我收到的错误是找不到命令。

文件sleepTest.sh:

#!/bash/bin

id=100

for i in {1..5}; do
    $((id+=50))

    sh argTest.sh "$id"
    sleep 2

done

档案argTest.sh:

#/bash/bin

id=$1
echo "processing $id..."

输出

sleepTest.sh: line 6: 150: command not found
processing 150
sleepTest.sh: line 6: 200: command not found
processing 200
sleepTest.sh: line 6: 250: command not found
processing 250
sleepTest.sh: line 6: 300: command not found
processing 300
sleepTest.sh: line 6: 350: command not found
processing 350

所以显然我有一个问题就是我如何递增$id,但它仍然在做。为什么?我怎样才能增加$id。我只是尝试$id+=50,但这根本不起作用。

2 个答案:

答案 0 :(得分:3)

忽略$

((id+=50))

((...))执行算术运算。 $((...))执行算术并将结果捕获为字符串。如果您执行echo $((...)),那就没问题,但如果您只编写$((...)),那么shell会将该数字视为要执行的命令的名称。

var=$((21 + 21))     # var=42
echo $((21 + 21))    # echo 42
$((21 + 21))         # execute the command `42`

答案 1 :(得分:3)

此类作业在算术表达式中是合法的。但是,bash仍尝试将表达式的结果解释为命令的名称。将它作为参数传递给:命令(POSIX方式)

: $((id+=50))

或使用bash算术语句而不是算术表达式

((id+=50))