0

任何人都可以帮助我解决 BASH 中的数组问题吗?我有这个代码:

i=1
cat test.txt | while read LINE; do
    string=$(echo $LINE | sed -e 's/\(^[^=]*\):[^=]*$/\1 /')
    log_content[$i]="$string"
    echo -e "\t $i) ${log_content[$i]}"
    i=$(expr $i + 1)
done
pattern=$(echo ${log_content[1]})   - this is zero :(

当我使用 ksh 而不是 bash 时,一切正常。当我使用 BASH(由于许多其他目的而想使用它)时,变量“模式”desnt 具有任何值。即使我想显示“log_content”数组的全部内容,也什么都没有。非常感谢。

4

1 回答 1

1

您的log_content变量被填充在运行while循环的子log_content外壳中,因此外壳中的变量值永远不会改变。

为了缓解这种情况,您应该通过使用输入重定向而不是管道来避免创建子shell:

while read LINE; do
  ...
done < test.txt

这应该有效。

于 2013-08-13T07:44:23.017 回答