使用嵌套循环(嵌套时)

时间:2017-12-25 05:46:16

标签: bash

我有一个代码,其中的代码目标是,如果您的输入与我的数据库中的单词匹配,它将打印句子中的第二个,即第一个单词的翻译。

问题是此代码打印数据库中的所有第二个单词。如果你能纠正我,我将非常感激。 这是我的代码:

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

非常感谢您的时间和耐心

2 个答案:

答案 0 :(得分:2)

这是Bash,而不是C.使用单个相等标记进行字符串相等比较:

test "$item1" = "$item" && ...
              ^

来自Bash的help test

STRING1 = STRING2
     

如果字符串相等则为真。

您正在循环遍历所有三个数组,而它们之间没有任何相关性。您应该使用bd的相同索引:

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" ]