我怀疑您的意思是写${PORTARR[i]}
( 的i
第 th 元素PORTARR
) 而不是(由 的第 th 元素${!PORTARR[i]}
命名的变量的值); 所以:i
PORTARR
for i in "${!PORTARR[@]}"; do
grep \<td\>"${!PORTARR[i]}"\<\/td\> tmp/portlist >> databases/ports.db
done
但我也推荐其他一些调整:
for elem in "${PORTARR[@]}"; do
grep "<td>$elem</td>" tmp/portlist
done > databases/ports.db
更新:对于您更新的问题,我认为您最好使用真正的编程语言,例如 Perl:
perl -we ' my @ports = @ARGV;
@ARGV = ();
my %ports = map +($_ => undef), @ports;
while(<>) {
my $fields = m/<td>([^<]*)<\/td>/g;
if(exists $ports{$fields[0]}) {
$ports{$fields[0]} = $fields[3];
}
}
foreach my $port (@ports) {
if(defined $ports{$port}) {
print "$port,$ports{$port}\n";
}
}
' "${PORTARR[@]}" < tmp/portlist > databases/ports.db
(免责声明:未经测试。)