bash中的无法解释的错误:脚本中的printf命令返回"无效的数字"

Fer*_*isi 15 bash printf

我无法printf在bash脚本中使用%e描述符打印变量.它会说

#!/bin/bash
a=14.9
printf %e 14.9;
Run Code Online (Sandbox Code Playgroud)

我知道这可能是一个非常简单的问题,但我对bash并不熟悉并且总是使用echo.另外,我无法在任何地方找到答案.


我跑的时候

$ ./test.text
./test.text: line 3: printf: 14.9: invalid number
0,000000
Run Code Online (Sandbox Code Playgroud)

因此我的问题是语言环境变量LC_NUMERIC:它被设置为使用逗号作为小数分隔符.事实上,它将成为欧洲本地化:

$ locale | grep NUM
LC_NUMERIC="it_IT.UTF-8"
Run Code Online (Sandbox Code Playgroud)

我以为我把它设置为en_US.UTF-8,但显然我没有.现在问题切换到找到如何设置我的语言环境变量.简单地使用

$ LC_NUMERIC="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

不行.

Kei*_*son 16

这个:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9
Run Code Online (Sandbox Code Playgroud)

$LC_NUMERIC仅在该命令的持续时间内设置.

这个:

export LC_NUMERIC="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

设置$LC_NUMERIC仅在当前外壳进程的持续时间.

如果你添加

export LC_NUMERIC="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)

到你的$HOME/.bashrc$HOME/.bash_profile,它将$LC_NUMERIC为你启动的所有bash shell 设置.

查找$LC_NUMERIC在您的.bashrc或其他shell启动文件中设置的现有代码.


Jan*_*lho 5

您可能遇到区域设置问题,并且它没有预料到句点。尝试:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9
Run Code Online (Sandbox Code Playgroud)