/ bin / bash printf不适用于除C之外的其他LANG
我有一个非常奇怪的问题/ bin / bash和一个使用printf格式化字符串的脚本.
我的脚本看起来像这样 rt=$(printf "%.3f" 13.234324245) 差异,我计算数字13.23 …以上.当我使用/usr/bin/zsh时效果很好!偶数/ bin / sh可以做到(但它不能做if if ……) 我的LANG变量设置为de_AT.UTF-8然后我得到此错误: /path/to/script: Zeile 12: printf: 13.234324245: Ungültige Zahl. 所以它只是说我给printf的数字无效…… 我需要以不同的方式运行printf吗? 编辑:问题似乎是在计算数字: rt=$(printf "%.3f" $(echo "$res2 - $res1"|bc )) 我怎么能告诉bc使用a而不是.?
您的问题源于LC_NUMERIC设置,在解析printf的参数时会出现bash.
我发现这种行为可疑. Ksh93还根据LC_NUMERIC解析数字,而pdksh和dash想要一个点作为参数中的分隔符,zsh接受点或本地格式. POSIX没有说,因为指定的浮点格式在printf中是可选的(尽管在打印数字时必须遵守LC_NUMERIC). 作为用户,我建议不要设置LC_NUMERIC和LC_COLLATE,除非在您确定需要其行为的特定情况下.这意味着不使用LANG并设置特定类别;大多数人只需要LC_CTYPE(字符编码),LC_MESSAGES(消息语言)和LC_TIME(日期和时间格式).在脚本中,您可以通过设置LC_ALL或特定类别来覆盖所有类别(设置LANG仅覆盖$LANG而不是用户设置$LC_NUMERIC). #!/bin/sh LC_NUMERIC=C LC_COLLATE=C printf "%.3f" 13.234324245 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |