![bash 脚本:为什么测试检查的不仅仅是完全匹配?](https://linux22.com/image/1024518/bash%20%E8%84%9A%E6%9C%AC%EF%BC%9A%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B5%8B%E8%AF%95%E6%A3%80%E6%9F%A5%E7%9A%84%E4%B8%8D%E4%BB%85%E4%BB%85%E6%98%AF%E5%AE%8C%E5%85%A8%E5%8C%B9%E9%85%8D%EF%BC%9F.png)
我正在尝试制作 HAL 9000。我有一个文件,其中包含电影中的“对话”,以及一个单词列表,其中包含 EEPROM 中的单词及其各自的内存位置,以及单词驻留在内存中的芯片。我编写了一个 bash 脚本,用于读取电影对话,并应输出内存地址和芯片。当单词长度超过一个字母时,它似乎有效。当单词为 1 个字母(即:i、a)时,它似乎会输出单词中找到该字母的每个实例。bash 脚本:
#!/bin/bash
#Read dialog get the word on a line, then find the memory location and chip it is on
#rec_column2 is the address in the chip for the word
#cs=Chip Select, the value of rec_column3
#wordlist is the library xlsx converted via: for i in *.xlsx; do libreoffice --headless --convert-to csv "$i" ; done
#then put in all lower case because I don't know how to compare values that only differ by case
#command used: tr '[:upper:]' '[:lower:]' < input.csv > wordlist.csv
input="dialog"
while IFS= read -r line
do
while IFS="," read -r rec_column1 rec_column2 rec_column3
do
if test "$line" = "$rec_column1"
then
echo "// " $line " , " $rec_column1 " :: " $rec_column2 ", " $rec_column3
#echo "digitalWrite($rec_column3,LOW);"
#echo "SPI.transfer($rec_column2);"
#echo "digitalWrite($rec_column3,HIGH);"
#echo "delay(850);"
fi
done < wordlist.csv
done < $input
[
带有记忆位置的单词列表是这里. HAL 9000 的对话是这里. 所以,如果单词不止一个字母,脚本似乎可以正常工作。为什么它会针对每个包含该字母的单词检查单个字母?我该如何不这样做?