如何理解这个bash脚本调试框架?

时间:2013-02-18 10:26:17

标签: bash

我尝试了解以下脚本调试框架。

#!/bin/bash
_DEBUG="on"
function DEBUG()
{
 [ "$_DEBUG" == "on" ] &&  $@
}

DEBUG echo 'Reading files'
for i in *
do
  grep 'something' $i > /dev/null
  [ $? -eq 0 ] && echo "Found in $i file"
done
DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x
echo "$a + $b = $c"

我无法理解DEBUG功能及其用法。

我的问题是

(0)$ @是什么意思?

(1)DEBUG如何回应'阅读文件'使用$ @?

(2)如何

DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x

使用$ @工作? 非常感谢你。

2 个答案:

答案 0 :(得分:0)

$ @ 扩展传递给函数的所有参数(或bash脚本本身)

例如。如果您致电DEBUG echo "test",则特殊变量$@将展开为echo "test"

DEBUG函数只检查$_DEBUG变量是否设置为"on"。如果是,则执行作为参数传递的命令(存储到$@变量中)

set -x将使解释器在执行之前立即打印每个命令,这样它将帮助您了解任何时间点发生的事情。

set +x将恢复正常行为

答案 1 :(得分:0)

(0)见man bash$@是所有位置参数的列表。

(1)DEBUG echo 'Reading files'使用两个参数echoReading files调用DEBUG。结果,echo Reading files是calles。

(2)set +x使bash在执行时打印命令及其参数。 DEBUG与$@的工作方式与(1)中相同。