【问题标题】:More Bash Problems [if statements always evaluating to false.] [duplicate]更多 Bash 问题 [如果语句总是评估为假。] [重复]
【发布时间】:2013-01-08 13:51:36
【问题描述】:

警告:这可能是特定的机器问题或 GNU bash 的问题,版本 4.2.37(1)-release (x86_64-pc-linux-gnu) 将在我进一步检查时更新。

更新 1:适用于 GNU bash,版本 4.2.39。和 GNU bash,版本 4.2.24

我正在编写提出问题的 bash 脚本。我希望有一个通配符 if 语句,但检查用户是否输入 no 或只是 n 但由于某种原因它似乎不起作用。

echo 'Is this a Personal Project? [y/n]'
    read ORG_SWITCH
echo 'Do you want to Open Source this project? [y/n]'
    read PRIVATE

这是 if 语句

if [[ $ORG_SWITCH == *"n"* ]] ; then
    if [[ $PRIVATE == *"n"* ]] ; then

它输出的错误是 [[: not found [[: not found

我不知道为什么。我确实看到了this,但在那里尝试了一些解决方案,但也许我只是不明白发生了什么。

任何帮助将不胜感激,请随时与我们交谈。

【问题讨论】:

  • 您的脚本是否以#!/bin/bash 开头? (如果你不这样做,也许另一种sh 用于运行它,没有内置[[?)
  • 脚本在顶部。发布整个内容实际上很长。但下面的简化脚本也从未验证过,所以我正在追查问题。

标签: bash


【解决方案1】:

您可以使用read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCH 来避免使用echo 并将用户输入限制为一个字符(yn)。您也可以在没有 [[ ]] 对的情况下测试您的状况:

read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCH 
read -n1 -p "Do you want to Open Source this project? [y/n] " PRIVATE

if [ "$ORG_SWITCH" = "n" ]; then 
    if [ "$PRIVATE" = "n" ]; then 
        echo "double no"
    fi
fi

在单括号条件 ([ ]) 中,始终将变量用双引号括起来,因此如果它们的计算结果为空,您的代码将不会出现语法错误

【讨论】:

    【解决方案2】:

    此代码适用于GNU bash, version 4.2.24

    #!/bin/bash
    echo 'Is this a Personal Project? [y/n]'
    read ORG_SWITCH
    
    if [[ $ORG_SWITCH == *"n"* ]] ; then
        echo "True $ORG_SWITCH"
    else
        echo "False $ORG_SWITCH"
    fi
    
    echo 'Do you want to Open Source this project? [y/n]'
    read PRIVATE
    if [[ $PRIVATE == *"n"* ]] ; then
        echo "True $PRIVATE"
    else
        echo "False $PRIVATE"
    fi
    

    这是输出

    Is this a Personal Project? [y/n]
    no
    True no
    Do you want to Open Source this project? [y/n]
    no
    True no
    

    我错过了什么吗?

    【讨论】:

    • 对此进行了测试并得到了相同的响应,就像我在 GNU bash 版本 4.2.37(1)-release (x86_64-pc-linux-gnu) 中的异常一样。我只是假设这是我的代码,因为通常我是链接中的弱链。
    • 也有可能你不是actually running bash。您正在使用./scriptname.sh 执行脚本,对吗?
    • 是的,刚刚在新的 VM.GNU bash 版本 4.2.39 上进行了测试。将继续发布更新,直到我深入了解它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 2013-06-01
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多