到目前为止 我有以下代码:
#!/bin/bash
echo "Adding new path...."
if [[$# -eq1] || [$# -eq2]]
then
if [$# -eq2]
then
export PATH=$PATH:/$1:/$2
fi
if [$# -eq1]
then
export PATH=$PATH:/$1
fi
else echo "Incorrect number of parameters. No more than two directories can be added at once."
fi
echo $PATH
exit 0
当我运行此脚本传递一个参数时,我收到一个错误: " ./ addDir:第3行:[[1:命令未找到 ./addDir:第3行:[1:未找到命令"
当我使用2个参数而不是" 1"它说" 2"
发生了什么?
答案 0 :(得分:2)
你错过了一些空格。基本上,如果您尝试使用[...]
构造,则需要在每个括号前后都有空格 - 将[
视为命令的名称,方式与echo
和]
作为该命令的参数。 (事实上,您的系统上可能确实存在/bin/[
程序。)正如您无法键入echofoo
并期望它运行echo
程序一样,您也可以如果您希望它运行[[$#
,请输入[
。
在您的情况下,您需要执行
之类的操作if [ $# -eq 2 ]; ...
对于您在第3行进行的复合测试,我认为您不能在测试中使用[
和]
。换句话说,不要使用这些括号进行分组;它必须是[ something ]
something
不包含任何括号。阅读bash手册页的相关部分,了解可以放置的详细信息。
还有一个shell构造[[ ... ]]
,它基本上做同样的事情,但语法不同。您可以使用它,但要注意它与[ ... ]
非常不同。