1

私は新しい概念、つまりbashスクリプトの連想配列に苦労してきました。

これが私のコードの簡略化されたバージョンです:

#!/bin/bash
declare -A MYID
MYID[hello]=world
tac /home/user/filename | while read -r line; do
  MYID[hello]=me
done
echo "${MYID[hello]}"
exit

これは私がやろうと思ったことです:1)MYIDと呼ばれる連想配列を宣言します2)MYIDで値worldをキーhelloに割り当てます3)ファイル/ home / user / filenameを1行ずつ逆方向に読み取ります4)読み取るたびにMYID配列のキーhelloに私を割り当てる行5)「me」を出力して終了します

それがすることは、「私」の代わりに「世界」を印刷することです。私は何が間違っているのですか?

4

1 に答える 1

2

パイプはサブシェルを作成するためMYID、whileループで行った変更は、そのサブシェルにのみ存在します。代わりにこれを試してください:

while read -r line; do
    MYID[hello]=me
done < <(tac /home/user/filename)
于 2013-01-17T19:30:39.580 に答える