2

脚本:

function insertMessage {
   $1 > log.txt
}

function checkResult {
  if [ $1 -eq 0 ]; then
    insertMessage "$2"
  else
    insertMessage "$3"
  fi
}

しかし、私がしようとすると:

 rm $DIR
 checkResult $? 'Directory deleted ok' 'Cannot delete directory'

Directorylog.txtでのみ受け取ります。bash は文字列内のスペースも考慮するよう$2ですDirectory

どうすれば解決できますか?ありがとう。

4

2 に答える 2

2

引用符を使用する:

function checkResult {
   if [ "$1" -eq 0 ]; then
     insertMessage "$2"
    else
     insertMessage "$3"
    fi
}

そしてあなたのinsertMessage関数は奇妙に見えます:

function insertMessage {
    echo "$1" >> log.txt
}

もっと理にかなっているでしょう。

于 2012-09-14T12:56:20.300 に答える
1

Mat が述べたように、引用符なしで $2 および $3 引数を渡しているため、このinsertMessage例では、関数は成功のために次の引数を受け取ります。

$1 = Directory
$2 = deleted
$3 = ok

したがってecho $1 > log.txt、出力には「ディレクトリ」のみが表示されます。

渡すパラメーターを引用符で囲まずに、引数のリスト全体をエコーするには、次のcheckResultようにします。

function insertMessage {
    echo $@ > log.txt
}

関数に渡さ$@れるすべてのパラメーターの配列です。

于 2012-09-14T13:13:41.000 に答える