bashスクリプト内で数値を3桁ごとにカンマ区切りにする命令がエラーになる時の対応方法

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

Shellスクリプトを書いている時に意図せずエラーが出る事があり、ハマってしまいました。
 

桁数の多い数値を表示する際に、3桁ごとにカンマ区切りにしたい場合、printfを使って、下記のように書けば、コマンドを入力すると簡単に表示する事ができます。
 

 

なんでシングルクォーテーションで3桁区切りになるのかは、「おまじない」だと思って使いましょう。
 

さらに、この命令は、ロケールの環境変数が”export LANG=ja_JP.utf-8;”になっていないと使えない命令なのだそうです。

shellスクリプト(bash)内で使うと何故かエラーになる事象発生

shellスクリプトを使って、色々なデータの値を表示する際に、桁数が多いものに3桁カンマをつけようと思い、上記の記述を行ったところ、”printf: %’: invalid directive”とエラー表示がされる・・・
 

通常shellスクリプトでは、`(バッククォート)を使って、値を変数に格納する書き方ができるが、その中は、コマンドをそのまま書く事ができる。
 

今回のスクリプトは以下のような感じだ。
 

 

これを実行すると、上記のエラーが発生する。
 

%’でエラーが出ているので、他のprintf分も試して見る。
 

 

どれもうまく行くんだな・・・
 

どうやら’(シングルクォート)がよろしくないようだ。

解決方法

シングルクォートを\(バックスラッシュ)をつけてエスケープしてみても、まったく効果が無く、行き着いた解決方法は以下のように記述するだけでした。
 

 

printfモジュールをフルパスで書く事で、何故か正常に表示されてしまいました。
 

ちなみに、この事象が発生したサーバーはDebian系Linuxだったので、CentOS系で同じプログラムを実行してみたところ、そちらでは問題なく動作しました。
 

Debian系とCentOS系のハイブリットスクリプトを記述するときは、こういう不具合が起きやすいという事を改めて認識できましたね。
 

みなさんもお気をつけて・・・

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です