更多Bash问题[if语句总是评估为false。]

时间:2013-01-24 17:51:34

标签: bash

Warninng:这可能是特定的机器问题或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语句,但检查用户输入否或只是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

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

任何帮助将不胜感激,请随时谈谈。

2 个答案:

答案 0 :(得分:0)

您可以使用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

在一个括号条件([ ])中,总是双引号变量,因此如果它们评估为空,则代码不会出现语法错误

答案 1 :(得分:0)

此代码适用于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

我错过了什么吗?