我想在一个循环中创建bash别名,循环是从命令读取行。为了逐行读取输出,我相信我需要将输出传送到read
。但是,当我这样做时,别名就不存在了。为什么我不能在一个while循环中进行评估?
如果我包括我的.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
别名a1
和a2
存在,但a3
和a4
没有。这两个循环之间有什么区别?
这是管道到'while'循环时很常见的问题。见[这个答案](http://stackoverflow.com/questions/7612320/bash-weird-variable-scope-when-populating-array-with-results/7612420#7612420),或[BashFAQ/024](http: //mywiki.wooledge.org/BashFAQ/024)了解详情和各种替代解决方案。 –
另外,没有必要在这里使用'eval'。 '别名$ x ='echo foo''将在定义别名之前展开'$ x'。 – chepner