功能是不是在bash
正确调用我有一个检查,如果操作系统是Linux或Mac此bash的代码,我用从其它函数调用的函数isWhat。功能是不是在bash
function isWhat
{
if [ `uname` == $1 ];
then
return 1
else
return 0
fi
}
function isLinux
{
return isWhat("Linux")
}
function isMac
{
return isWhat("Darwin")
}
但是,我得到了这些错误:
/functions.sh: line 13: syntax error near unexpected token `('
/functions.sh: line 13: ` return isWhat("Linux")'
runme.sh: line 7: isMac: command not found
可能是什么问题?
这是修复一些错误后的工作代码。
function isWhat
{
if [ "`uname`" = $1 ];
then
echo 1
else
echo 0
fi
}
function isLinux
{
isWhat "Linux"
}
function isMac
{
isWhat "Darwin"
}
的使用量(假设前面的功能在abc.sh)
source abc.sh
echo $(isMac)
if [ $(isMac) == 1 ];
then
echo "A"
fi
我不知道确切原因,但我不得不添加function
,使代码的工作,无论如何,我使用Mac OS X 10.11.1。
fwiw,你之前用return的方式,如果你换了0/1,你可以简单地使用'if isLinux;然后... fi'。 – FatalError
您正在错误地调用bash函数。
例如
return isWhat("Linux")
应该
return isWhat "Linux"
等
...并没有指向'返回';只是让它“isWhat”Linux“将'isWhat'函数的返回值传递给调用者。 –
此外,'return'的文档将其定义为一个整数,而不是根本调用的命令。 –
也是如此。 – Matt
那不是你如何调用函数bash
。他们的工作就像其他shell命令,即:
function isLinux
{
isWhat "Linux"
}
此外,return
是多余的函数将返回的最后一个命令运行的退出状态。如果你想明确说明,你可以这样写:
function isLinux
{
isWhat "Linux"
return $?
}
如果我们将人们指向最佳实践,我倾向于提出符合POSIX标准的函数调用语法('isLinux(){'不包含'function')。 –
@CharlesDuffy:好点。 OP确实说过'bash',但是由于这个问题的关键在于检测平台,所以我更倾向于同意。 – FatalError
另外,根本不要使用'function'关键字;它使您的脚本与POSIX sh不兼容,原因不明。 'isWhat(){'足以启动一个函数,并且使用该形式保持与纯POSIX shell的兼容性。 –
顺便说一句,你在这里也有其他的错误 - 你在扩展周围缺少引号(这是一个“真正的”错误,即使你唯一的目标是bash),并且==不能保证通过POSIX标准(标准化的字符串比较运算符是'=',而不是'==')在'[]'内部工作。尝试通过运行http://shellcheck.net/来自动检查引用错误。 –
......作为一个实践问题,如果你正在编写一些东西作为包含文件并使用bash-only语法,请将其命名为“.bash”,而不是“.sh”。 –