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)
为什么它会以“一元运算符预期”的形式抛出错误?
当您使用:
if ( foo $1 )
Run Code Online (Sandbox Code Playgroud)
您很容易foo $1在子shell 中执行并if根据其退出状态执行操作。
当您使用:
if [ foo $1 ]
Run Code Online (Sandbox Code Playgroud)
您正在尝试使用 shell,test而foo不是有效的测试运算符。您可以在此处找到有效的测试运算符。
它不一定与您的问题相关,但您也应该始终引用变量,尤其是在 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,其中两个或多个字符串的存在期望其中一个是有效的测试运算符。