我试图以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
,但这根本不起作用。
答案 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))