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,但尝试了一些解决方案,但也许我只是不明白发生了什么。
任何帮助将不胜感激,请随时谈谈。
答案 0 :(得分:0)
您可以使用read -n1 -p "Is this a Personal Project? [y/n] " ORG_SWITCH
来避免使用echo
并将用户输入限制为一个字符(y
或n
)。您也可以在没有[[ ]]
对的情况下测试您的情况:
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
我错过了什么吗?