- 此问题在此处已有答案**:
When to wrap quotes around a shell variable?(5个答案)
11小时前关门了。
我一直在编写一个示例bash程序来练习bash脚本编写,但是每当我尝试使用正确的变量运行它时,它都会输出"[:=:应为一元运算符""并退出。
#! /bin/bash
clear
i=""
P="PASSWORD"
echo "Please enter your password"
while [ $i = "PASSWORD" ]
do
read $i
done
2条答案
按热度按时间k5hmc34c1#
如果$i为空,则会出现语法错误,因为参数不足[="PASSWORD"]
1.您可以使用bash选项$i ="PASSWORD"但它是bash操作符,可能与旧shell不兼容
1.你可以把你的变量放在配额中,比如["$i"="PASSWORD"]这是首选的方法,如果你的变量包含空格或shell扩展标记,比如 *,?,[1..9],你也可以解决这个问题。
wqnecbli2#
但每当我试图使用正确的变量运行它时,它都会输出“[:=:应为一元运算符“”并退出。
这是因为在
[
中有一个未加引号的/空的变量,要么给变量加引号,要么使用[[
,这样更安全、更健壮。while [ $i =“密码”]
$i
的值为空,用户无法提供值/输入,因此将失败编辑:正如
@William Pursell
提到的,无论你使用哪种测试,它仍然有一些陷阱,这里的教训是净化/验证输入,例如测试它是否确实是一个数字,如果它不为空等等。试试这个,它可能会做你想要的。