我想在一個循環中創建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