dポイントプレゼントキャンペーン実施中!

失礼します。
シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか?

str:ファイル内のテキスト(数値文字列)

res=$(( $str + 1 ))

・エラー
")syntax error: invalid arithmetic operator (error token is "


よろしくお願いします。

A 回答 (4件)

bashをご使用と判断して



res=$(( $str + 1 ))
ではなく、
res=$(( str + 1 ))
だと思います。

> exprもやってみたのですが、処理が遅くなるので使いません。
興味があって以下のシェルで検証してみました。

#!/bin/bash

str=1
i=0

echo 'Using $((str + 1))'
date '+%H:%M:%S.%N'

while [ $i -lt 10000 ]
do
str=$(( str + 1))
i=`expr $i + 1`
done

date '+%H:%M:%S.%N'

exit

$ ./test.sh
Using $((str + 1))
09:18:46.290418000
09:18:56.929345000
これをexprに書き換えたところ
$ ./test2.sh
Using expr
09:19:00.302748000
09:19:19.259990000

exprだと19秒ですが、$(( 演算 )) だと10秒程度なので、演算が多くなれば確かにexprは不利ですね。
    • good
    • 3

どういう内容のファイルからどのように読み取っているのでしょうか?


例えば, その前に
echo \"$str\"
を実行したらどのような表示が得られますか?
    • good
    • 1

> exprもやってみたのですが、処理が遅くなるので使いません。


> 他の方法ないですか?

expr では処理が遅くなるとのことですが、いったいどのような重い処理をされているのでしょう?

シェルに算術演算の機能はありませんので、シェルスクリプトで算術演算を行う場合はどうしても外部コマンドを呼び出すしか方法がありません。

また、処理速度が問題になるのでしたら、より高速な処理が可能な言語(例えば Perlなど)で書き換えた方が簡単に実現可能かもしれません。

あるいは、処理方法(アルゴリズム)自体を見直すとか。
    • good
    • 2

expr コマンドを使えばよいのでは?



例) res=`expr $str + 1`
    • good
    • 2
この回答へのお礼

ありがとうございます。

exprもやってみたのですが、処理が遅くなるので使いません。
他の方法ないですか?

お礼日時:2009/10/16 15:36

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

このQ&Aを見た人はこんなQ&Aも見ています