函数在bash中调用不正确

函数在bash中调用不正确,bash,Bash,我有一个bash代码来检查操作系统是Linux还是Mac,我使用的函数是从其他函数调用的内容 function isWhat { if [ `uname` == $1 ]; then return 1 else return 0 fi } function isLinux { return isWhat("Linux") } function isMac { return isWhat("Darwin") } 但是,我得到了以下错误:

我有一个bash代码来检查操作系统是Linux还是Mac,我使用的函数是从其他函数调用的内容

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

可能有什么问题?

您错误地调用了bash函数

e、 g

应该是

return isWhat "Linux"

etc

您错误地调用了bash函数

e、 g

应该是

return isWhat "Linux"

etc

这不是在
bash
中调用函数的方式。它们与其他shell命令一样工作,即:

function isLinux 
{
    isWhat "Linux"
}
此外,
返回
是冗余的,该功能将返回上次命令运行的退出状态。如果你想明确,你可以这样写:

function isLinux 
{
    isWhat "Linux"
    return $?
}

这不是在
bash
中调用函数的方式。它们与其他shell命令一样工作,即:

function isLinux 
{
    isWhat "Linux"
}
此外,
返回
是冗余的,该功能将返回上次命令运行的退出状态。如果你想明确,你可以这样写:

function isLinux 
{
    isWhat "Linux"
    return $?
}

这是修复一些bug后的工作代码

function isWhat 
{
  if [ "`uname`" = $1 ];
  then
    echo 1
  else
    echo 0  
  fi
}

function isLinux 
{
    isWhat "Linux"
}

function isMac
{
    isWhat "Darwin"
}
用法是(假设前面的函数在abc.sh中)


我不知道确切的原因,但我必须添加
函数
,以使代码正常工作。无论如何,我使用Mac OS X 10.11.1

这是修复一些bug后的工作代码

function isWhat 
{
  if [ "`uname`" = $1 ];
  then
    echo 1
  else
    echo 0  
  fi
}

function isLinux 
{
    isWhat "Linux"
}

function isMac
{
    isWhat "Darwin"
}
用法是(假设前面的函数在abc.sh中)


我不知道确切的原因,但我必须添加
函数
,以使代码正常工作。无论如何,我使用Mac OS X 10.11.1

另外,不要使用
函数
关键字;它使您的脚本与POSIX sh不兼容,这是没有充分理由的
isWhat(){
足以启动一个函数,并且使用该表单可以保持与纯POSIX shell的兼容性。顺便说一句,这里也有其他bug——您缺少扩展的引号(这是一个“真正的”bug,即使您的唯一目标是bash),并且
=
不能保证在
[]内部工作
由POSIX标准实现(标准化的字符串比较运算符是
=
,而不是
=
)。试着运行一个自动检查引用错误的程序……作为实践,如果您正在编写要作为包含文件来源的内容,并且使用的是bash-only语法,请将其命名为
.bash
,而不是
.sh
。此外,根本不要使用
函数
关键字;这会使您的脚本与POSIX SHF不兼容或者没有什么好的理由。
是什么(){
足以启动一个函数,并且使用这种形式可以保持与纯POSIX shell的兼容性。顺便说一句,这里也有其他的bug——您缺少扩展的引号(这是一个“真正的”bug,即使您的唯一目标是bash),而且
=
不能保证在
[]内部工作
由POSIX标准实现(标准化的字符串比较运算符是
=
,而不是
=
)。试着运行一个自动检查引用错误的程序……作为实践,如果您正在编写某个源代码作为包含文件并使用bash-only语法,请将其命名为
.bash
,而不是
.sh
…并且
返回没有意义;
只需将其命名为
就是“Linux”
将把返回值从
isWhat
函数传递给调用者。此外,
return
的文档定义它是一个整数,而不是一个要调用的命令……而且
return
没有任何意义;只需将它设置为
就是什么“Linux”
将把返回值从
isWhat
函数传递给调用者。此外,
return
的文档将其定义为使用整数,而不是调用命令。如果我们要让人们了解最佳实践,我倾向于推荐与POSIX兼容的函数调用语法(
isLinux(){
没有
函数
)。@CharlesDuffy:Good point.OP确实说了
bash
,但由于这一点是为了检测平台,所以让它更跨平台是很有意义的,所以我倾向于同意。如果我们把人们引向最佳实践,我倾向于建议POSIX兼容的函数调用语法(
isLinux(){
功能
)@CharlesDuffy:这一点很好。OP确实说了
bash
,但因为这一点是为了检测平台,所以让它更跨平台是很有意义的,所以我倾向于同意。fwiw,你以前使用returns的方式,如果你交换0/1,你可以简单地使用
如果isLinux;然后…fi
。fwiw,你以前使用ret的方式urns,如果您交换了0/1,您只需使用
如果isLinux;然后使用…fi