Bash:虚假的"命令未找到"消息(我认为)

nom*_*men 0 bash

我试图在Bash中编写一个简单的实用程序函数,它将在给定目录中执行"操作".所以我基本上抽象了"去目录,做某事,然后回来"的模式.

inDir() {
    if [$# -le 1]; then
        return;
    else
        local dir="$1";
        local action="$2";
        local cwd=`pwd`;

        if [ -d "$dir" ]; then
            cd "$dir";
            $action;
            cd "$cwd";
        else 
            return;
        fi
    fi
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我运行它时,我得到了我认为是一个虚假的错误,我不知道它来自哪里.例如:

$ inDir "/tmp" "touch hi"
Run Code Online (Sandbox Code Playgroud)

正确创建文件/ tmp/hi,但也给出错误:

[2: command not found
Run Code Online (Sandbox Code Playgroud)

我不确定这对于阅读错误是否重要,但我的提示以"["开头.

有帮助吗?

小智 6

尽管它看起来像什么,'['实际上是一个叫做的命令test,所以:

if [$# -le 1]; then
Run Code Online (Sandbox Code Playgroud)

应该:

if [ $# -le 1 ]; then
Run Code Online (Sandbox Code Playgroud)

注意'['和下一位代码之间的空格.没有它,代码读作为

test$#
Run Code Online (Sandbox Code Playgroud)

我认为这显然是错误的.在关闭方括号之前还需要一个空格,它不是命令,而是分隔符.