Bash阵列无法正常工作?

时间:2014-02-07 22:35:50

标签: bash

以下代码未输出任何内容。

#!/bin/bash
declare -A a
cat input.txt | while read item value
do
if [ $item="owner" ] || [ $item="admin" ] || [ $item="loc" ] || [ $item="ser"]
then
a[$item]=$value
fi
done
echo ${a[owner]}

输入文件是:

owner sysadmin group
admin ajr
loc S-309
ser 18r97
comment noisy fan

我需要为owner,admin,loc和ser。

创建一个仅用于索引的数组

我期望echo $ {a [owner]}的输出为sysadmin组,依此类推。

任何帮助?

编辑: 我认为它可能与所有者有关系是sysadmin组,我如何将它(带空格的两个单词)读成变量(值)?

1 个答案:

答案 0 :(得分:1)

这是因为您使用管道来使用子shell。在子shell中进行的所有更改仅对子shell是本地的,不会反映在父shell中。

使用此:

#!/bin/bash
declare -A a
while read item value
do
  if [ $item="owner" ] || [ $item="admin" ] || [ $item="loc" ] || [ $item="ser"]
  then
    a[$item]=$value
   fi
done < input.txt

echo ${a[owner]}
sysadmin group