bash 脚本在变量赋值时崩溃
bash script crashes on variable assignment
我正在编写一个 bash 脚本来自动执行一些我需要 运行 多次输入变量数组的 opencv 代码。
出于某种原因,当我尝试将 0 分配给标志变量时,我的 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
为什么会这样?
尝试去掉 let 并只使用简单的“=”赋值,let 通常只是用于算术运算,它实际上与 (()) 相同。
man set -e
如果一个简单命令以非零状态退出,则立即退出,除非
失败的命令是 until 或 while 循环的一部分,是
if 语句,&& 或 || 的一部分列表,或者如果命令的 return 状态
正在使用 ! 反转。 -o 退出
man let 每个表达式都是一个要求值的算术表达式。如果最后一个表达式的计算结果为 0,则让 returns 为 1;否则 0 是 returned.
尝试删除 set -e
对于 set -e
,结果为零的算术计算是您必须处理的 "error"。用普通赋值替换有问题的 let
会删除算术上下文,所以这可能是您应该做的。
您仍应查看脚本的其余部分是否存在类似问题,或者放弃使用 set -e
,尤其是当您不是 Bash 脚本专家时。特别是,如果您正在测试的程序可以 return 非零退出代码,那仍然会终止脚本。
我正在编写一个 bash 脚本来自动执行一些我需要 运行 多次输入变量数组的 opencv 代码。 出于某种原因,当我尝试将 0 分配给标志变量时,我的 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
为什么会这样?
尝试去掉 let 并只使用简单的“=”赋值,let 通常只是用于算术运算,它实际上与 (()) 相同。
man set -e 如果一个简单命令以非零状态退出,则立即退出,除非 失败的命令是 until 或 while 循环的一部分,是 if 语句,&& 或 || 的一部分列表,或者如果命令的 return 状态 正在使用 ! 反转。 -o 退出
man let 每个表达式都是一个要求值的算术表达式。如果最后一个表达式的计算结果为 0,则让 returns 为 1;否则 0 是 returned.
尝试删除 set -e
对于 set -e
,结果为零的算术计算是您必须处理的 "error"。用普通赋值替换有问题的 let
会删除算术上下文,所以这可能是您应该做的。
您仍应查看脚本的其余部分是否存在类似问题,或者放弃使用 set -e
,尤其是当您不是 Bash 脚本专家时。特别是,如果您正在测试的程序可以 return 非零退出代码,那仍然会终止脚本。