我有一个代码,这个代码的目标是,如果你的输入匹配我的数据库中的一个单词,它将打印句子中的第二个,这是第一个单词的翻译。
问题是这个代码打印数据库中的所有第二个单词。如果你能纠正我,我将非常感激。这是我的代码:
cari=$(zenity --entry "Masukan Kata Yang Ingin Anda Cari:")
IFS=" " read -ra field <<< $cari
b=(`cat Kamus2.txt | awk '{print $1}'`)
d=(`cat Kamus2.txt | awk '{print $2}'`)
for item2 in ${d[*]}
do
for item1 in ${field[*]}
do
for item in ${b[*]}
do
test "$item1" = "$item" && { echo -n "$item2 "; }
done
done
done
echo " "
例如数据库:
Aku I
Ingin Want
Roti Bread
Makan Eat
我想要的输出例如:如果我输入Aku Ingin Makan
,输出将是I Want Eat
非常感谢你的时间和耐心
这是Bash,而不是C.使用单个相等标记进行字符串相等比较:
test "$item1" = "$item" && ...
^
来自Bash的help test
:
STRING1 = STRING2
如果字符串相等则为True。
您正在循环遍历所有三个数组,而它们之间没有任何相关性。你应该使用相同的b
和d
索引:
for item in ${field[@]}
do
for ((i = 0; i < ${#b[@]}; i++))
do
if test "$item" = "${b[$i]}"
then
echo "${d[$i]}"
fi
done
done
如果要将所有输出放在一行上,请为-n
使用选项echo
:
echo -n "${d[$i]} "
你可以在这个链接上阅读我在bash
中关于字符串比较的答案:
Why "[ 1 > 2 ]" evaluates to True?
更特别是这部分:
字符串比较
=
等于
if [ "$a" = "$b" ]
警告
注意框架=
的空白。
if [ "$a"="$b" ] is not equivalent to the above.
==
等于
if [ "$a" == "$b" ]
这是=
的同义词。
Note
The == comparison operator behaves differently within a double-brackets test than within single brackets.
[[ $a == z* ]] # True if $a starts with an "z" (pattern matching).
[[ $a == "z*" ]] # True if $a is equal to z* (literal matching).
[ $a == z* ] # File globbing and word splitting take place.
[ "$a" == "z*" ] # True if $a is equal to z* (literal matching).
!=
不等于
if [ "$a" != "$b" ]