• ベストアンサー

シェルスクリプトでファイル内の数値文字列を数値として扱うには

失礼します。 シェルスクリプトでファイル内のテキスト(数値文字列)を取得して、それを使って計算するにはどうすれば良いでしょうか? str:ファイル内のテキスト(数値文字列) res=$(( $str + 1 )) ・エラー ")syntax error: invalid arithmetic operator (error token is " よろしくお願いします。

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

  • ベストアンサー
回答No.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は不利ですね。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

どういう内容のファイルからどのように読み取っているのでしょうか? 例えば, その前に echo \"$str\" を実行したらどのような表示が得られますか?

noname#227025
noname#227025
回答No.2

> exprもやってみたのですが、処理が遅くなるので使いません。 > 他の方法ないですか? expr では処理が遅くなるとのことですが、いったいどのような重い処理をされているのでしょう? シェルに算術演算の機能はありませんので、シェルスクリプトで算術演算を行う場合はどうしても外部コマンドを呼び出すしか方法がありません。 また、処理速度が問題になるのでしたら、より高速な処理が可能な言語(例えば Perlなど)で書き換えた方が簡単に実現可能かもしれません。 あるいは、処理方法(アルゴリズム)自体を見直すとか。

noname#227025
noname#227025
回答No.1

expr コマンドを使えばよいのでは? 例) res=`expr $str + 1`

wishw124
質問者

お礼

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

関連するQ&A