第 39 行:[: ==: 预期的一元运算符

line 39: [: ==: unary operator expected

我正在尝试生成符合特定要求的密码。 当我进入 while 循环以从数组中生成一个随机字符时,它很好,直到我为我的索引“$i”

添加一个计数

使用以下代码:

#!/bin/bash

#SET ARRAY VALUES
all=( 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z )

echo

#SET COUNT VALUES TO 0
numc=0
lowc=0
upc=0
i=0

while true;
do
#GENERATE PASSWORD
phrase[$i]=${all[$RANDOM%62]}
    #CHECK IF PASSWORD MEETS REQUIREMENTS
    for ((n=0; n<10; n++))
    do
            if [ ${phrase[$i]} == ${all[$n]} ]
            then
            echo num ${all[$n]}
            let "numc++"
            let "i++"
            fi
    done

我收到错误 "line 39: [: ==: unary operator expected"

但如果我删除 let "i++" 行,则不会出现错误。但是我需要增加索引才能退出循环并检查密码的最小长度

如果 ${phrase[$i]}(顺便说一句,您不需要 [$i] 上下文 ${phrase[i]} 中的 $ 也可以工作)是 [=14= 的空字符串] 测试将变为 [ == value-of-all-n ],这不是有效测试。

要么引用变量(这几乎总是正确的做法),要么防止它成为空字符串。 (i++ 应该在内循环之外发生吗?)