ループ内でコマンドの行を読み込んでいるbashエイリアスを作成したいとします。出力を1行ずつ読み込むために、出力を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
にはありません。これら2つのループの違いは何ですか?
これは、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'を使う必要はありません。 'alias $ x = 'echo foo''はエイリアスを定義する前に' $ x'を展開します。 – chepner