函数在bash中调用不正确
我有一个bash代码来检查操作系统是Linux还是Mac,我使用的函数是从其他函数调用的内容函数在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") } 但是,我得到了以下错误:
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
。