linux - 在linux中添加一两个目录到PATH变量(使用Bash脚本)

标签 linux bash ubuntu

到目前为止 我有以下代码:

    #!/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”

发生什么事了?

最佳答案

您缺少一些空格。基本上,如果您尝试使用 [...] 结构,则需要在每个括号之前和之后都有空格 - 将 [ 视为命令的名称,与 echo 相同,将 ] 视为该命令的参数。 (事实上​​,您的系统上实际上可能有一个 /bin/[ 程序。)正如您无法键入 echofoo 并期望它运行 echo 程序一样,如果您期望它运行 [,也无法键入 [[$#]。

就您而言,您需要执行以下操作

if [ $# -eq 2 ]; ...

对于您在第 3 行中进行的复合测试,我认为您不能在测试中使用 [] 。换句话说,不要使用这些括号进行分组;它必须是[something],其中something不包含任何括号。请阅读 bash 手册页的相关部分,了解您可以在其中放置的内容的完整详细信息。

还有一个 shell 构造 [[ ... ]] ,它基本上执行相同的操作,但具有不同的语法。您可以使用它来代替,但请注意它与 [ ... ] 有很大不同。

关于linux - 在linux中添加一两个目录到PATH变量(使用Bash脚本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46334221/

相关文章:

python - 尝试安装 tensorflow 时收到奇怪的权限错误

mysql - 结合 DROP USER 和 DROP DATABASE 与 SELECT .. WHERE 查询?

ubuntu - Vim "Error detected while processing/usr/share/vim/vimrc"

linux - 数数没有。使用回波时间

linux - 当我尝试使用 Net::SNMP 连接到我的设备时,为什么会收到错误 "Received usmStatsUnknownUserNames.0 Report-PDU with value 1"?

php - Laravel 远程 ssh 很慢

bash - 如何更新 zip 存档中的一个文件

bash - 不为源脚本提供参数

jquery - Recaptcha Django cms - 验证码需要一分钟以上

linux - GitLab:无法从远程存储库读取