Shell脚本中的调用函数

rah*_*rma 5 shell-script function test

我在 shell 中编写了一个简单的函数,它根据某些条件返回 0 或 1。让我称该函数名称为 foo

foo(){

...

...

}
Run Code Online (Sandbox Code Playgroud)

现在我试图在 if 条件下调用 foo 如下:-

if ( foo $1 )

...

..
Run Code Online (Sandbox Code Playgroud)

它工作正常。但是当我使用跟随方法调用时,我得到错误

if [ foo $1 ]

...

...
Run Code Online (Sandbox Code Playgroud)

为什么它会以“一元运算符预期”的形式抛出错误?

jes*_*e_b 5

当您使用:

if ( foo $1 )
Run Code Online (Sandbox Code Playgroud)

您很容易foo $1在子shell 中执行并if根据其退出状态执行操作。

当您使用:

if [ foo $1 ]
Run Code Online (Sandbox Code Playgroud)

您正在尝试使用 shell,testfoo不是有效的测试运算符。您可以在此处找到有效的测试运算符。


它不一定与您的问题相关,但您也应该始终引用变量,尤其是在 shell 测试括号内。shell 测试将在存在某些东西的情况下成功。因此,即使使用有效的测试运算符,您也可能会得到不需要的结果:

$ unset var
$ [ -n $var ] && echo yes
yes
$ [ -n "$var" ] && echo yes
$ [ -n "" ] && echo yes
$ [ -n ] && echo yes
yes
$ [ foo ] && echo yes
yes
$ [ foo bar ] && echo yes
-bash: [: foo: unary operator expected
Run Code Online (Sandbox Code Playgroud)

在 shell 测试中存在单个字符串将评估为 true,其中两个或多个字符串的存在期望其中一个是有效的测试运算符。