• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Bシェルで配列を使いたいのですが・・・)

Bシェルで配列を使いたいのですが・・・

このQ&Aのポイント
  • Bシェルで配列を使った処理を実現したいが、うまくできない。
  • Bシェルファイルでテキストファイルの内容を読み込んで変数に代入し、表示する処理を実装したいが、エラーが発生する。
  • Bシェルスクリプト内での変数の宣言や置換の方法に誤りがあるため、配列の処理が正常に実行されない。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

bashであれば#1の方が書かれたように配列が使えますが、純粋なBシェルでは配列は使えません。 exec 3<&0 < TBL.txt count=0 while read line do eval ex$count=\$line count=`expr $count + 1` done exec 0<&3 3<&- echo $ex1 のようにします。 最後のechoのところで、添字が変数のときは、 eval echo \$ex$count のようにします。 何故上手く行かないのかは、シェルが変数置換したり、* を展開したり、' や " や \ 等の特殊文字を処理したり、組み込みコマンドの判断をしたりには一定の順序があるということです。 ex$count=$line はイコールの左辺がシェル変数の形式をしていない($がある)ため、シェル変数への代入と見なされません。この判断は $ による変数置換の前に終わってしまいます。変数置換後に外部コマンド呼び出しの構文と解釈されます。変数置換後には代入コマンドかどうかの判断は行われません。 eval はそれらの解釈をもう一度やり直すコマンドです。 eval ex$count=\$line の場合、$countの置換 と、\$ を $ に置換したあとの、ex0=$line をもう一度最初から解釈しなおすので、代入コマンドとなります。

DOG45
質問者

お礼

大変役に立ちました。ありがとうございました。

その他の回答 (1)

回答No.1

よくわかんないけど、表題の件からして、こんな感じ? x.txt 1111111111 2222222222 3333333333 これを、配列に代入して表示するんでしょ? bash$ IFS=" > " bash$ DATA=(`cat x.txt`) bash$ echo ${DATA[0]} 1111111111 こんな感じで、出そうなもんだけど、いかが?

関連するQ&A