我想在目录中提供文件,我试图让它与这个循环一起工作:
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
按我的预期工作。是否涉及范围?
答案 0 :(得分:1)
请参阅http://mywiki.wooledge.org/BashFAQ/024和Bash 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