在bash'while read'循环中设置的变量在它之后未设置[重复]

Posted

技术标签:

【中文标题】在bash\'while read\'循环中设置的变量在它之后未设置[重复]【英文标题】: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循环”之后不能打印是什么意思?你有错误吗?没有错误,但没有打印出来? 【参考方案1】:

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

command1 | command2

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

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

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

【讨论】:

非常感谢,我为我工作。实际上,我不知道它会单独工作 好答案;为了完整起见:command1 在子shell中执行。

以上是关于在bash'while read'循环中设置的变量在它之后未设置[重复]的主要内容,如果未能解决你的问题,请参考以下文章

关于while read line 循环中变量作用域的问题

while read line 与for循环的区别

Shell编程入门

如何在 while 循环中“读取”变量

[shell基础]——read命令

更改变量并将输出保存在R中的for循环中