我有一个 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 变量时使用引号;它们可能包含空格或为空,当不加引号时,它们通常会混淆传递给它们的命令(参数太多或丢失)。