【问题标题】:Adding one or two directories to PATH variable in linux ( Using Bash script) [duplicate]在linux中将一两个目录添加到PATH变量(使用Bash脚本)[重复]
【发布时间】:2018-03-02 05:35:35
【问题描述】:

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

    #!/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: command not found ./addDir: line 3: [1: command not found "

当我使用 2 个参数而不是“1”运行它时,它会显示“2”

发生了什么事?

【问题讨论】:

  • 在这些条件下你需要更多的空间。 if [[ $# -eq 1 || $# -eq 2 ]]
  • @Kevin(我认为)这真的应该是一个答案
  • @DavidZ 呃,我现在真的没有耐心解释它。
  • @Kevin 当然,但我认为这并不重要 - 您在评论框中发布的文本可能已被复制并粘贴到答案框中,这将是一个有效的(尽管是最小的)答案.

标签: linux bash ubuntu


【解决方案1】:

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

在你的情况下,你需要做类似的事情

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

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

还有一个 shell 构造 [[ ... ]],它的功能基本相同,但语法不同。您可以改用它,但请注意它与 [ ... ] 非常不同。

【讨论】:

    猜你喜欢
    • 2015-01-02
    • 2022-01-20
    • 1970-01-01
    • 2019-05-12
    • 2016-12-05
    • 2013-11-26
    • 2012-02-13
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多