下面的bash脚本正确吗?

下面的bash脚本正确吗?,bash,shell,Bash,Shell,以下代码中有什么错误 while read -r -u 3 line1 && read -r -u 4 line2 do if [ $line2 = "moon" ] #can i do this? echo "hi" fi done done 3<file1 4<file2 读取-r-u3行1和读取-r-u4行2时 做 如果[$line2=“moon”]#我可以这样做吗? 回音“嗨” fi 完成 完成3 执行字符串操作时始终引用字

以下代码中有什么错误

while read -r -u 3 line1 && read -r -u 4 line2
do 
    if [ $line2 = "moon" ] #can i do this?
       echo "hi"
    fi
done 
done 3<file1 4<file2
读取-r-u3行1和读取-r-u4行2时
做
如果[$line2=“moon”]#我可以这样做吗?
回音“嗨”
fi
完成
完成3
执行字符串操作时始终引用字符串变量。
而
[[]]
是一个更好的选择。
阅读相关内容,了解脚本的意义是什么?只能根据规范验证脚本。它能满足你的需要吗?这会给你一个错误吗

我看到的主要问题是,您是否正在读取两个文件,但仅使用第二个文件。您的脚本似乎可以替换为:

$ grep -qF "moon" file2 && echo "hi"

line2是一个变量,而不是string@user2613272,它仍然是一个解释变量,无论它是否有这些引号。引号可以防止空字符串有时遇到的问题。条件表达式不需要引用参数扩展,因为它在该设置中不执行字扩展。实际上,它是我的脚本的一部分,也是elif的一部分,因此错误是意外标记elif[[“$line2”=“moon”]]附近的语法错误我们应该知道怎么做?此类信息是必需的,请阅读B.T.W您发布的错误消息与您发布的脚本不匹配!?你用的是单括号还是双括号?如果是双括号,请确保脚本由
bash
运行
sh
无法识别双括号表达式。更一般地说,您的错误消息与您发布的代码不匹配,因此没有
elif
子句。为什么在末尾有两个“done”?
$ grep -qF "moon" file2 && echo "hi"