循环中的环境范围(for while while)

时间:2014-10-12 19:34:49

标签: bash loops while-loop

我想在目录中提供文件,我试图让它与这个循环一起工作:

ls -1 $HOME/.bash_complete.d |while read f; do
    . $HOME/.bash_complete.d/$f
done

虽然脚本似乎已被执行,但其中的任何export foo=bar都不会出现在env

下面的for对应部分:

for f in $HOME/.bash_complete.d/*; do
    . $f
done

按我的预期工作。是否涉及范围?

2 个答案:

答案 0 :(得分:1)

请参阅http://mywiki.wooledge.org/BashFAQ/024Bash Script: While-Loop Subshell Dilemma的答案(这个问题是重复的),while循环中的所有内容都在子shell中执行,因此它有自己的范围。在此范围内声明的变量将不会在范围外显示。

答案 1 :(得分:0)

-l不是必需的,它提供了很长的文件列表。所需要的只是文件的名称,可以通过简单的ls命令

获得
ls $HOME/.bash_complete.d |while read f; do
    echo $HOME/.bash_complete.d/$f
    $HOME/.bash_complete.d/$f
done