Bash shell在while循环后“清除”一个变量,如何获取变量内文件夹中的所有文件? [复制]

Posted

技术标签:

【中文标题】Bash shell在while循环后“清除”一个变量,如何获取变量内文件夹中的所有文件? [复制]【英文标题】:Bash shell is "clearing" a variable after while loop, how to get all files in a folder inside a variable? [duplicate] 【发布时间】:2013-04-22 22:39:00 【问题描述】:

我正在尝试列出文件夹中的所有文件并将它们添加到变量中,并用分号分隔。 然后我需要在文件中回显变量。这是我的sn-p

#!/bin/bash
SEP=";"
LIB="lib/"
DEP=""
ls -t1 target/lib/ | while read -r FILE
do
    DEP=$DEP$LIB$FILE$SEP
done
echo "$DEP"

DEP 变量填充在 while 循环内,如果我从那里回显,我可以看到正确的结果。在循环之外,变量被“清除”并且它没有回应。 我如何保留结果?我做错了什么?

OSX 10.8.3 GNU bash,版本 3.2.48(1)-release (x86_64-apple-darwin12) 版权所有 (C) 2007 Free Software Foundation, Inc.

【问题讨论】:

【参考方案1】:

问题不在于 while 循环,而在于管道。 | 符号之后的所有内容都在子shell 中运行。要解决此问题,请使用进程替换:

while read -r FILE
# ...
done < <(ls -t1 target/lib/)

【讨论】:

像魅力一样工作!谢谢!

以上是关于Bash shell在while循环后“清除”一个变量,如何获取变量内文件夹中的所有文件? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

bash的循环中无法保存变量

在使用读取(bash)的while循环中禁用用户输入

Shell脚本画图形

Shell for while 循环

bash编程练习脚本

循环语句和函数