0

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

#!/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 echo 'Reading files' 如何使用 $@ 工作?

(2) 怎么做

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

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

4

2 回答 2

0

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

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

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

于 2013-02-18T10:36:10.423 回答
0

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

例如。如果调用DEBUG echo "test"特殊变量$@将扩展为echo "test".

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

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

set +x将恢复正常行为

于 2013-02-18T10:34:33.700 回答