実現したいこと
以下LinuxコマンドをRubyから実行したい。
awk '{printf("%.1f", int($1*100)/100 - 0.2)}'
前提
Rubyのsystemメソッドを使用し、上記コマンドを実行しなければならない。
発生している問題・エラーメッセージ
syntax error: invalid arithmetic operator (error token is ".1")
該当のソースコード
system("awk '{printf(\"%.1f\", int($1*100)/100 - 0.2)}'")
仮説
以下部分がShellでは違った文字列で解釈されているかもしれません。
\"%.1f\"
補足情報(FW/ツールのバージョンなど)
ruby 2.7.0p0
手元の環境では問題ありませんね。。。
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux-gnu]
$ cat test.rb
system("echo '10 20 30' | awk '{printf(\"%.1f\", int($1*100)/100 - 0.2)}'")
$ ruby test.rb
9.8
「該当のソースコード」をどの様に実行してますか?
melianさんのコメントの様に記述してください。
質問ありがとうございます。申し訳ありません、上記質問にコードが不足していました。正しくは以下になります。
$ ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-darwin20]
$ cat test.rb
system("LENGTH=$(echo '10 20 30' | awk '{printf(\"%.1f\", int($1*100)/100 - 0.2)}') ; echo $((LENGTH))")
$ ruby test.rb
sh: 9.8: syntax error: invalid arithmetic operator (error token is ".8")
以下で解決したかもしれません。
問題ないか確認します。
$ cat test.rb
system("LENGTH=$(echo '10 20 30' | awk '{printf(\"%.1f\", int($1*100)/100 - 0.2)}') ; echo $LENGTH")
$ ruby test.rb
9.8
解決しました。問題は$((LENGTH))でした。
とても助かりました。
実行くださったコードのみの確認を怠っていたため、原因を突き止められませんでした。
わざわざ環境を揃えてまで実行結果を共有くださりありがとうございます!
何故、「実際に実行してエラーが発生したコード」と異なる「実行してもエラーが発生しないコード」を掲載して質問したのでしょうか?
回答1件
あなたの回答
tips
プレビュー