为什么我不能在 while 循环内评估?

2024-05-05

我想在循环中创建 bash 别名,其中循环从命令读取行。为了逐行读取输出,我相信我需要将输出通过管道传输到read。然而,当我这样做时,别名不存在。

如果我将以下内容包含在我的.bashrc:

for x in a1 a2; do
    eval "alias $x='echo foo'"
done

echo -e "a3\na4" | while read x; do
    eval "alias $x='echo foo'"
done

Aliases a1 and a2存在,但是a3 and a4不要。这两个循环有什么区别?


管道中的 while 循环在子 shell 中运行。你可以做:

while read x; do
    eval "alias $x='echo foo'"
done << EOF
a3
a4 
EOF
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我不能在 while 循环内评估? 的相关文章

随机推荐