使用set -u进行bash调试

时间:2011-03-23 16:20:33

标签: linux debugging bash set environment-variables

我有一个bash sourcedbash.sh 来自另一个bash主代码 main.sh
使用“ set -u ”选项运行 main.sh ,我收到的错误比我无法弄清楚:

Error /sourced_bash.sh : line xx : variable without link  

main.sh

. sourced_bash.sh
my_function $foomain 1

sourcedbash.sh

function my_function(){
   local foo=$1
   local bar=$2
   if [[ 1 -eq $bar ]];then # <= this is LINE xx generating the error
        # ... dothis
        return 1
   elif [[ 0 -eq $bar ]];then
        # ... dothat
        return 0
   fi
}

查看手册页并阅读“我的朋友”,但没有取得圆满成功。

我需要理解为什么“ set -u ”意味着 main.sh 程序吸收以及如何摆脱这个错误(Debian Lenny)。

提前谢谢

1 个答案:

答案 0 :(得分:2)

由于您正在进行字符串比较,因此需要使用引号和==。尝试更改为:

   if [[ "1" == "$bar" ]] || [[ "true" == "$bar" ]];then

<强>更新

什么是$foomain?它已经确定了吗?

set -u让Bash检查您是否已初始化所有变量。如果还没有,Bash将抛出有关未绑定变量的错误。