我有一个调用命令的函数,当命令失败时我必须回显一条消息,然后返回1信号失败。
编辑:对不起我不记得我对if的尝试是怎样的,正如其他答案所指出的那样,我可能做了一些愚蠢的错误,所以我将其删除。
这个很好用:
function F() {
command || return 1
}
但是我需要回复消息来表示失败的原因,所以我尝试了这个,即使这不会从函数返回
function F() {
command || (echo "message" && return 1)
}
请建议正确的方法。
答案 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”应该已经打印出来。