替换为局部变量时函数的返回值

时间:2012-01-04 11:18:32

标签: bash

说我有以下两个Bash脚本:

版本#1:

#!/bin/bash

function bar
{
  if true; then
    echo "error" >&2
    exit 1
  fi
  echo "bar"
}

function foo
{
  local val=`bar`
  echo $?
  echo "val: $val"
}

foo

版本#2秒稍有不同foo

function foo
{
  val=`bar` #note no 'local'
  echo $?
  echo "val: $val"
}

版本#1给出了以下输出:

error
0
val:

虽然版本#2给了我这个:

error
1
val:

在#2中加入local似乎隐藏了bar的返回值。

我认为这是正确的,因为local本身就是一个函数,并且返回0?如果是这样,有没有办法绕过这个并使val成为局部变量,但仍然会测试bar的返回值?

1 个答案:

答案 0 :(得分:1)

是的,您正在阅读成功的local的返回值。修复是将变量声明与其定义分开,如下所示:

#!/bin/bash

function bar
{
  if true; then
    echo "error" >&2
    exit 1
  fi
  echo "bar"
}

function foo
{
  local val
  val=$(bar)
  echo $?
  echo "val: $val"
}

foo

输出

$ ./localtest
error
1
val: