
下記のBシェルファイルで、あるテキストファイルの内容を1行ずつ読み込んで、その行を変数に代入し、後続にてその変数を表示するという処理を実現したいのですが、うまくいきません。
どのようにすればうまく行くのかまた、何故うまくいかなかったのかをご教授頂ければと思っております。
宜しくお願い致します。
<Bシェルファイル>
#!/bin/sh
exec 3<&0 < TBL.txt
count=0
while read line
do
ex$count=$line
count=`expr $count + 1`
done
exec 0<&3 3<&-
echo ${ex[1]}
exit 0
<結果>
aho.sh: ex0=A コマンドが見つかりません。
aho.sh: ex1=B コマンドが見つかりません。
aho.sh: ex2=C コマンドが見つかりません。
aho.sh: 置換が正しくありません
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 をもう一度最初から解釈しなおすので、代入コマンドとなります。
No.1
- 回答日時:
よくわかんないけど、表題の件からして、こんな感じ?
x.txt
1111111111
2222222222
3333333333
これを、配列に代入して表示するんでしょ?
bash$ IFS="
> "
bash$ DATA=(`cat x.txt`)
bash$ echo ${DATA[0]}
1111111111
こんな感じで、出そうなもんだけど、いかが?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 文字列にスペ...
-
コマンドプロンプトをクリック...
-
ftpコマンド出力結果の取得
-
C#でLAN内の他のPCをシャ...
-
バッチ終了時にDOS窓を閉じるコ...
-
VB6.0 から RFIDタグを制御す...
-
ftpコマンドを実行すると「425 ...
-
DOSコマンドで指定日数よりも過...
-
コマンドプロンプトのFTPコマン...
-
[MATLAB] データ型を指定した変...
-
バッチファイルでのMACアドレス...
-
Windows2000のコマンドプロンプ...
-
バッチファイルについて教えて...
-
Pythonで単純にファイルを結合...
-
make test って何をするための...
-
シェルスクリプト内のcdで、カ...
-
コマンドプロンプトを最小化し...
-
WebOTXのdeployコマンドについて
-
AccessVBAで実行時間を指定する...
-
バッチファイルでdiskpart.exe...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 文字列にスペ...
-
バッチ終了時にDOS窓を閉じるコ...
-
コマンドプロンプトをクリック...
-
make test って何をするための...
-
findstrでヒットした1行前の文...
-
AccessVBAで実行時間を指定する...
-
SSH接続でwindowsサーバのコマ...
-
DOSコマンドに詳しい方、お知恵...
-
シェルの「:コマンドが見つか...
-
ショートカットをデスクトップ...
-
フォルダ、ファイル操作に最適...
-
ftpコマンドを実行すると「425 ...
-
ftpコマンド出力結果の取得
-
バッチファイルでのMACアドレス...
-
DOSコマンドで指定日数よりも過...
-
2つ目の「pause」は無効?
-
バッチファイルでdiskpart.exe...
-
バッチえファイルを編集するに...
-
シェルスクリプト内のcdで、カ...
-
Pythonで単純にファイルを結合...
おすすめ情報