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'

Directory我只在 log.txt 中收到。似乎 bash 也考虑了字符串中的空格 - 所以$2只作为 word 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

您正在传递 $2 和 $3 参数而没有像 Mat 提到的那样引用,因此该insertMessage函数在您的示例中收到以下参数以表示成功:

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

因此,echo $1 > log.txt您只会在输出中获得“目录”。

要回显整个参数列表,而不引用您传入的参数,checkResult您可以执行以下操作:

function insertMessage {
    echo $@ > log.txt
}

where$@是传递给函数的所有参数的数组。

于 2012-09-14T13:13:41.000 回答