如何从消息中返回bash函数?

时间:2014-04-22 04:50:19

标签: bash

我有一个调用命令的函数,当命令失败时我必须回显一条消息,然后返回1信号失败。

编辑:对不起我不记得我对if的尝试是怎样的,正如其他答案所指出的那样,我可能做了一些愚蠢的错误,所以我将其删除。

这个很好用:

function F() {
  command || return 1
}

但是我需要回复消息来表示失败的原因,所以我尝试了这个,即使这不会从函数返回

function F() {
  command || (echo "message" && return 1)
}

请建议正确的方法。

3 个答案:

答案 0 :(得分:2)

在这种情况下:

function F() {
  command || (echo "message" && return 1)
}

括号创建一个子shell,因此返回发生在子shell中而不是从函数返回。要避免这种情况,请改用{ }(但请注意,在}之前需要在它们周围留出空格和分号)。此外,使用function关键字是非标准的。最后,将错误消息发送到stderr而不是stdout是常规的。这是结果函数定义:

F() {
  command || { echo "message" >&2 && return 1; }
}

我不知道为什么if ...版本对你不起作用(它对我有用),除非你在那里使用了括号。

答案 1 :(得分:0)

你说

  

看起来像if块返回,而不是函数,

我没有看到相同的行为。

我创建了一个包含以下行的文件test-04.sh

function F() {
  if [ -f "test-04.sh" ]; then
    echo "message";
    return 1;
  fi
  echo "another message"
}

F

当我通过bash运行文件时,我得到以下输出:

message

将文件内容更改为

function F() {
  if [ ! -f "test-04.sh" ]; then
    echo "message";
    return 1;
  fi
  echo "another message"
}

F

并通过bash运行,我得到了以下输出。

another message

答案 2 :(得分:0)

我怀疑if if是否从if返回。 请将您的测试结果发布给我们!

你的第一种做法是正确的,看看

function F() {
  if [ 1 ]; then 
echo "message"; 
return 1; 
fi
echo "Happy Holiday" ; return 0
}
F ; echo $?

输出

message 1

如果返回,如果那时“假日快乐0”应该已经打印出来。