在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'循环中设置的变量在它之后未设置[重复]的主要内容,如果未能解决你的问题,请参考以下文章