プロが教える店舗&オフィスのセキュリティ対策術

シェルスクリプトを作成しており、配列を組んでいます。
最終的には配列内にある値を比較し、文字列連結をしたいのですが、配列にきちんと値が格納されているかの確認で止まっています。

cat ./tmp.csv |while read line
do
number[$count]=`echo $line |cut -f 1 -d "," |sed -e 's/"//g'`
echo ${number[$count]}
done

上記内容で何も出力されません。
echo ${number[1]}ではきちんと出力されるのですが、どのようにしたらよろしいでしょうか。

A 回答 (2件)

私は普段はcsh系しかつかわないので、bashはあれなんですが、



number[$count]=`echo $line |cut -f 1 -d "," |sed -e 's/"//g'``
count=`expr $count + 1`
echo ${number[$count]}

だと、echoで表示しようとしているのは、まだ代入されていない配列の要素になりませんか。

たとえば$count=1の時には、number[1]に代入されるけど、表示しようとしているのはまだ定義されていないnumber[2]になるんじゃ。
count=`expr $count + 1`をechoのあとに持って来れば?
    • good
    • 0
この回答へのお礼

仰る通りでした!!!!!!

解決いたしました。ありがとうございます!

お礼日時:2021/03/30 15:11

インデックスの$countが初期化されていないし、更新もされてませんが、いいんでしょうか。

    • good
    • 0
この回答へのお礼

回答ありがとうございます
スクリプトの中身を抜粋したのですが、その際に更新に初期化・更新している部分を消してしまいました。

count=1
while read line
do
number[$count]=`echo $line |cut -f 1 -d "," |sed -e 's/"//g'``
count=`expr $count + 1`
echo ${number[$count]}
done < ./tmp.csv

変数がパイプをつかっていた為、外部利用できなかったので上記のように変更しています。

お礼日時:2021/03/30 14:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!