【问题标题】:Variables set in a bash 'while read' loop are unset after it [duplicate]在bash'while read'循环中设置的变量在它之后未设置[重复]
【发布时间】:2014-05-05 21:24:24
【问题描述】:

我尝试使用下面的代码将命令输出存储在一个数组中 但是在“while循环”之后无法打印数组元素 我的意思是在我的代码的最后一行 我的代码有什么问题吗?

#! /bin/bash

ls -a | while read line

do
    array[$i]="$line "  

        echo ${array[ $i ]}
        ((i++))
done

echo ${array[@]}  <------------

【问题讨论】:

  • 你说的数组元素在“while循环”之后不能打印是什么意思?你有错误吗?没有错误,但没有打印出来?

标签: linux bash


【解决方案1】:

问题是您在 subshell 中添加元素。详细说明:

command1 | command2

导致command2 在子shell 中执行,这是一个单独的执行环境。这意味着command2 中设置的变量对当前 shell 不可用,其执行环境不受影响。您可以改为使用流程替换来实现相同的目的:

while read line; do
 ...
done < <(ls -l)

请注意不推荐parsing ls;尝试改用find

【讨论】:

  • 非常感谢,我为我工作。实际上,我不知道它会单独工作
  • 好答案;为了完整起见:command1 在子shell中执行。
猜你喜欢
  • 2017-01-12
  • 2019-01-05
  • 2021-04-25
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多