麻烦将参数传递给简单的ShellScript(找不到命令)

Spe*_*cer 3 unix macos bash shell scripting

我正在尝试编写一个简单的shell脚本,如果有的话,打印出第一个参数,如果没有则打印"none".该脚本名为test.sh

    if [$1 = ""]
    then
        echo "none"
    else
        echo $1
    fi
Run Code Online (Sandbox Code Playgroud)

如果我在没有参数的情况下运行脚本,一切正常.但是,如果我运行此命令source test.sh -test,我会-bash: [test: command not found在脚本继续运行并正确回声测试之前收到此错误.我究竟做错了什么?

she*_*ter 9

你需要在'[',']'之前/之后的空格,即

if [ "$1" = "" ] ; then
#---^---------^ here
   echo "none"
else
    echo "$1"
fi
Run Code Online (Sandbox Code Playgroud)

并且您需要使用上面编辑的引号将您的引用(实际上所有引用)包装到$ 1.

修复之后,您可能还需要提供脚本的相对路径,即

source ./test.sh -test
#------^^--- there
Run Code Online (Sandbox Code Playgroud)

当你得到一个shell错误信息时,你在这里几乎总是有帮助在set -vx导致你麻烦的行之前打开shell调试,或者非常靠近你的脚本.然后,您可以看到正在执行的每行/代码块,以及shell正在使用的变量的值.

我希望这有帮助.