在 bash 程序中获取“[:=:预期一元运算符”

Joe*_*gio 1 linux bash shell

我一直在开发一个示例 bash 程序来练习 bash 脚本编写,但每当我尝试使用正确的变量运行它时,它都会输出“[:=:预期的一元运算符”并退出。

#! /bin/bash
clear
i=""
P="PASSWORD"
echo "Please enter your password"
while [ $i = "PASSWORD" ]
do
  read $i
done
Run Code Online (Sandbox Code Playgroud)

Sab*_*eur 9

如果 $i 为空,则由于参数不足而出现语法错误 [ = "PASSWORD" ]

  1. 你可以使用 bash 选项 [[ $i = "PASSWORD" ]] 但它是 bash 操作符,它可能与旧 shell 不兼容

  2. 你可以把你的变量放在配额中,比如 [ "$i" = "PASSWORD" ] 这是首选的事情,如果你的变量包含空格或 shell 扩展标记,如 *、?、[1..9 ]

  • 就我个人而言,我更喜欢*总是*双引号变量引用(即使在`[[]]`中大多数使用的地方,可以安全地将它们放在一边),除非有特定的原因*不*对它们进行双引号。这让我不必去记住所有安全与不安全的情况。例如,您是否知道在 `[[ "$a" = "$b" ]]` 测试中,将双引号保留在左侧 (`$a`) 是安全的,但将其保留右侧(`$b`)改变了测试的含义?(如果没有引号,它将把 `$b` 视为全局模式而不是普通字符串。) (2认同)