在unix中逐行比较两组变量,代码只打印出最后一行

时间:2016-08-22 15:10:06

标签: bash unix scripting

这是关于bash脚本的第一个stackoverflow问题。我是这种语言的初学者,所以要善待我。

我正在尝试编写一个比较脚本。我试图将所有输出存储到变量中,但只存储最后一个。

示例代码:

me:1234567

you:2345678

us:3456789

我的代码:

#!bin/bash

while read -r forName forNumber

do

  aName="$forName"

   echo "$aName"

  aNumber="$forNumber"

   echo "$aNumber"

done < "exampleCodeFile.txt"

echo "$aNumber"

第一次,一切都会被打印出来。但是,第二个回声只打印出“3456789”,但不会再打印出所有数字。与$ aName相同。这是一个问题,因为我有另一个文件,我存储了一堆数字来比较$ aNumber,使用上面列出的相同方法,称为$ aMatcher,包括:

aMatcher:

1234567

2345678

3456789

所以如果我试图进行比较:

if [ "$aNumber" == "$aMatcher" ]; then

echo "match found!"

fi

预期输出(使用bash -x“scriptname”):

'['1234567 == 1234567']'

echo "match found!"

实际输出(使用bash -x“scriptname”):

 '['3456789 == 3456789']'

echo "match found!"

当然我的最终产品会列出所有比赛,但我希望在尝试其他任何事情之前解决我当前的问题。谢谢!

1 个答案:

答案 0 :(得分:1)

运行以下代码时

aNumber="$forNumber"

您为文件$aNumber的每一行覆盖变量exampleCodeFile.txt而不是附加。

如果您确实想要追加值,请将上面的行更改为

aNumber="$aNumber $forNumber"

在与$aMatcher匹配时,您还必须使用for / while循环来遍历$aNumber$aMatcher中的每个值。