2012-10-11 1 views
5

printfを取得して、%e記述子を持つ変数をbashスクリプトに出力できません。それはちょうど私は、これはおそらく非常に簡単な質問ですけど、私はbashのにかなり新たなんだと常にechoを使用スクリプト内のbash:printfコマンドで解読不可能なエラーが "無効な数値"を返す

#!/bin/bash 
a=14.9 
printf %e 14.9; 

を言うでしょう。プラス私はどこでも答えを見つけることができませんでした。実行時に


は、私は私の問題は、ロケール変数LC_NUMERICあるので

$ ./test.text 
./test.text: line 3: printf: 14.9: invalid number 
0,000000 

を得る:私は小数点の記号としてコンマを使用するように、それが設定されています。確かに、それはヨーロッパのローカライズに設定されています:

$ locale | grep NUM 
LC_NUMERIC="it_IT.UTF-8" 

私はEN_US.UTF-8に設定すると思ったが、明らかに私はしませんでした。今、問題は、私のロケール変数を設定する方法を見つけるために切り替わります。単に使用

$ LC_NUMERIC="en_US.UTF-8" 

は動作しません。

+4

どうしますか?ここでうまく動作します... –

+0

このコードはここでうまく動作しますが(結果1.490000e + 01)、このページhttp://linuxconfig.org/bash-printf-syntax-basics-with-examplesは、%eが/引用符で囲む必要があります。 "%e"を表示します。 – enhzflep

+0

@enhzflep:ありがとうございましたが、問題はそれではありません。引数自体に必要がない限り、printfの引数を二重引用符で囲む必要はありません。とにかくそれなしで動作します。 変数を $ LC_NUMERIC = "en_US.UTF-8" と設定できますが、これは非永続的です。 どうすれば永久にすることができますか?私はCygwinを実行する。 –

答えて

8

この:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9 

セット$LC_NUMERICだけその1つのコマンドの期間を。

これ:

export LC_NUMERIC="en_US.UTF-8" 

セットのみ現在のシェル・プロセスの期間$LC_NUMERIC

あなたの$HOME/.bashrc$HOME/.bash_profile

export LC_NUMERIC="en_US.UTF-8" 

を追加した場合、それはあなたが起動し、すべてのbashシェルの$LC_NUMERICを設定します。

.bashrcまたは他のシェル起動ファイルに$LC_NUMERICを設定する既存のコードを探します。

+0

素晴らしい、魅力的なように働いた! –

2

ロケールに問題があり、期間が必要ではありませんでした。試してみてください:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9 
関連する問題