我有一个代码,其中的代码目标是,如果您的输入与我的数据库中的单词匹配,它将打印句子中的第二个,即第一个单词的翻译。
问题是此代码打印数据库中的所有第二个单词。如果你能纠正我,我将非常感激。 这是我的代码:
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
非常感谢您的时间和耐心
答案 0 :(得分:2)
这是Bash,而不是C.使用单个相等标记进行字符串相等比较:
test "$item1" = "$item" && ...
^
来自Bash的help test
:
STRING1 = STRING2
如果字符串相等则为真。
您正在循环遍历所有三个数组,而它们之间没有任何相关性。您应该使用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]} "
答案 1 :(得分:0)
您可以在此链接中阅读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" ]