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エコー「ファイルの読み取り」はどのように機能しますか?

(2)どのように

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

$ @を使用して作業しますか?どうもありがとうございます。

4

2 に答える 2

0

$ @は、関数(またはbashスクリプト自体)に渡されるすべてのパラメーターを展開します

例えば。DEBUG echo "test"特別な変数を呼び出すと、$@に展開されecho "test"ます。

この関数は、変数がに設定されているDEBUGかどうかをチェックするだけです。その場合、パラメータとして渡されたコマンドを実行します(変数に格納されます)$_DEBUG"on"$@

set -x、実行される直前にインタプリタに各コマンドを出力させるので、任意の時点で何が起こっているかを知るのに役立ちます。

set +x通常の動作に戻ります

于 2013-02-18T10:34:33.700 に答える
0

(0)manbashを参照してください。$@すべての位置パラメータのリストです。

(1) 2つのパラメーターとをDEBUG echo 'Reading files'使用してDEBUGを呼び出します。結果として、はcallesです。echoReading filesecho Reading files

(2)set +x実行時にコマンドとその引数をbashに出力させます。DEBUGは$@、(1)と同じように機能します。

于 2013-02-18T10:36:10.423 に答える