不是您实际提出的问题,而是...您告诉用户输入“是”或“否”,但只测试 y 或 n - 当然,您给了他们一个提示,但用户是抗提示的。因此,也许需要进行更宽松的测试:
echo "Please enter yes or no (y/n)"
read string
case "$string" in
[yY]* | [nN]*) echo "User entered $string" ;;
*) echo "I don't understand '$string'" ;;
esac
这将识别以 Y 或 N 开头的任何变化——通常这已经足够好了,但你可以加强测试。此外,由于您可能希望通过 yes 或 no 响应来做一些不同的事情,您可以扩展案例(我也加强了这个案例中的测试):
case "$string" in
[yY] | [yY][eE][sS]) echo "Here's where you process yes" ;;
[nN] | [nN][oO]) echo "And here you deal with no" ;;
*) echo "I don't understand '$string'" ;;
esac
您可以使用 if 语句执行此操作,但我发现当可能有两个以上的替代方案并且测试适合 case 语法时,case 更具可读性。