20

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

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

我知道这可能是一个非常简单的问题,但我对 bash 还很陌生,而且总是使用echo. 另外,我在任何地方都找不到答案。


跑步时我得到

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

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

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

我以为我将它设置为 en_US.UTF-8,但显然我没有。现在问题切换到如何设置我的语言环境变量。只需使用

$ LC_NUMERIC="en_US.UTF-8"

不会工作。

4

3 回答 3

24

这:

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

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

这:

export LC_NUMERIC="en_US.UTF-8"

$LC_NUMERIC仅在当前 shell 进程期间设置。

如果你添加

export LC_NUMERIC="en_US.UTF-8"

对于您的$HOME/.bashrcor $HOME/.bash_profile,它将$LC_NUMERIC为您启动的所有 bash shell 设置。

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

于 2012-10-11T18:50:19.000 回答
4

您可能遇到了语言环境问题,并且预计不会有一段时间。尝试:

LC_NUMERIC="en_US.UTF-8" printf %e 14.9
于 2012-10-11T18:24:10.360 回答
1

我遇到了这个错误并找到了这个页面。就我而言,这是 100% 的飞行员错误。

month=2
printf "%02d" month

它应该是

printf "%02d" "${month}"

或更简单地说

printf "%02d" $month
于 2019-06-09T19:26:39.597 回答