2

警告:这可能是特定的机器问题或 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

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

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

4

2 回答 2

0

您可以使用read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCHto 避免使用echoand 将用户输入限制为一个字符(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

在一个括号条件 ( [ ]) 中,始终将您的变量双引号,因此如果它们评估为空,您的代码将不会产生语法错误

于 2013-01-24T18:05:37.310 回答
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

我错过了什么吗?

于 2013-01-24T18:17:22.190 回答