3.12.2013

[Linux]shell上のwhile内の変数をwhileの外で利用したい

暫くはまったのでメモ

shellで作ったスクリプトのwhile内で利用した配列変数を
whileの外で利用しようとして、使えないという落とし穴に
はまってしまう人がいるかと・・・・Orz

whileの利用方法に問題があるんですねぇ^^;

例えば、外部ファイルをwhileで行単位に読み込んで
配列変数に入れ込み、それをwhileの外で利用したい場合に
下記2パターンで試すと片方は使えない。

1パターンは成功
2パターンは失敗

「test.txt」ファイル内容
A
B
C

「test.sh」ファイル内容
-------------------
■1パターン
#!/bin/sh

FILENAME=$1
i=0
ARRAY=()

while read line
do
 ARRAY[${i}]="${line}"
 ((i++))
done < ${FILENAME}

echo "${ARRAY[@]}"

結果
#./test.sh test.txt
A B C

-------------------
■2パターン
#!/bin/sh

FILENAME=$1
i=0
ARRAY=()

cat ${FILENAME} | while read line
do
 ARRAY[${i}]="${line}"
 ((i++))
done

echo "${ARRAY[@]}"

結果
#./test.sh test.txt
【空白】
-------------------

1と2の違い
<(レフトアングル)でwhileにファイルを読み込ませるか、
|(パイプ)でwhileにファイルを読み込ませるか。

結果
|(パイプ)を利用してwhileに読み込ませると、whileの
外で変数を使用しても結果は【空白】になってしまう。

いやぁ、簡単なことだけに簡単に落とし穴にはまって出てこれないというワナ。。。Orz

以上

0 件のコメント:

コメントを投稿