捕获 bash 中读取的单个字符的意外输入

捕获 bash 中读取的单个字符的意外输入

我有一个 bash 脚本,它有时会要求用户确认。我通过读取单个字符来做到这一点,然后将其转换为小写并检查它是否为“y”。如果没有,则脚本退出。

现在,如果我只需在读取的输入上按 Enter 键,我就会得到error: unary operator expected.如何防止此问题或捕获错误?

代码片段:

echo -ne "Confirm [y/n]: "
read -n1 uc

if [ ${uc,,} != "y" ]
then
    exit 0
fi

答案1

该语句应该可以正常工作:

if [ "${uc,,}" != "y" ]

说明:当uc为空时,您的测试将由 shell 扩展,如下所示:

if [  != "y" ]

而带引号的是

if [ "" != "y" ]

经验法则:总是在扩展包含字符串的 shell 变量时使用引号;它们可能包含空格或为空,当不加引号时,它们通常会混淆传递给它们的命令(参数太多或丢失)。

相关内容