我正在编写一个bash脚本来自动化一些opencv代码,我需要多次运行一系列变量。 出于某种原因,当我尝试将0分配给flag变量时,我的bash脚本不断崩溃。 我也在if循环之外尝试了这个,它也会导致脚本崩溃。
#!/bin/bash
set -e
# Build most recent code
cd build2/
cmake ..
make
Scale=(9 9)
inputType="scale"
flag=1
counter=0
for i in ${Scale[@]}; do
echo iteration: $counter
if [ $counter -eq 0 ]
then
echo first iteration
let flag=0 #Crashes Here
echo after assignment $flag
else
echo not first iteration
let flag=1 #Doesn't crash here
echo after assignment $flag
fi
echo starting program
#Note 1.inputValue 2.Input Type 3.firstGo
./multiDimen ${i} $inputType $flag
echo Test Type is: $inputType
let counter=counter+1
done
echo Done
有什么理由说这应该是这样的吗?
答案 0 :(得分:3)
使用set -e
,结果为零的算术评估是您必须处理的“错误”。用普通赋值替换有问题的let
会删除算术上下文,这可能就是你应该做的。
您仍应查看脚本的其余部分以了解类似问题,或放弃使用set -e
,尤其是如果您不是Bash脚本专家。特别是,如果您正在测试的程序可能返回非零退出代码,那么仍然会终止该脚本。
答案 1 :(得分:0)
尝试取走let并使用简单的' ='赋值,let通常只用于算术,它实际上与(())相同。
答案 2 :(得分:0)
man set -e 如果一个简单的命令以非零状态退出,则立即退出,除非 失败的命令是until或while循环的一部分,是while的一部分 if statement,&& amp;&或||列表,或命令的返回状态 正在使用! -o errexit
man let 每个表达式都是要计算的算术表达式。如果最后一个表达式的计算结果为0,则返回1;否则返回0。
尝试删除set -e