String 在Bash脚本中,如何以逗号分隔的方式打印包含字符和数字变量的字符串?

String 在Bash脚本中,如何以逗号分隔的方式打印包含字符和数字变量的字符串?,string,bash,scripting,String,Bash,Scripting,使用bash脚本,我需要向终端打印一个字符串,该字符串使用一个存储数字的变量,但是如果需要,该变量可以使用逗号分隔打印 例如,如果我有一个值为1000的变量,我想在终端上打印如下内容: “计数等于1000” 我想知道我是否可以用一个printf命令来实现这一点。printf是否有一个格式选项可以实现这一点,或者是否有一种方法可以操纵变量,以便我可以将其转换为带有逗号分隔的字符串?尝试以下方法: printf "%'d" $MYVAR 如果您需要在末尾添加新行,请执行以下操作: printf "

使用bash脚本,我需要向终端打印一个字符串,该字符串使用一个存储数字的变量,但是如果需要,该变量可以使用逗号分隔打印

例如,如果我有一个值为1000的变量,我想在终端上打印如下内容:

“计数等于1000”

我想知道我是否可以用一个printf命令来实现这一点。printf是否有一个格式选项可以实现这一点,或者是否有一种方法可以操纵变量,以便我可以将其转换为带有逗号分隔的字符串?

尝试以下方法:

printf "%'d" $MYVAR
如果您需要在末尾添加新行,请执行以下操作:

printf "%'d\n" $MYVAR
总而言之:

printf "Count is equal to %'d\n" $MYVAR
如果您在Mac电脑上,可能需要安装
coreutils
。我建议使用:
brew安装coreutils


根据@KamilCuk,需要注意的是,逗号/小数与数字的分隔是基于您的本地化。如果您想更改,可以根据以下答案执行:

有趣的问题,但
如果需要,可以使用逗号分隔打印。
不是一个很好的解释。什么时候应该打印逗号?@ArkadiuszDrabczyk你说得对,我的错。当我说“如果需要的话”,我的意思是如果数字变量需要逗号分隔来划分单位。例如1234和1234567,但不是123请注意,组中的千位分隔符和位数取决于区域设置。
printf
是bash/zsh内置的,因此仅安装coreutils以获得GNU
printf
是无效的。如果格式化修改器不起作用,可能是因为bash的旧版本。如果确实安装了
coreutils
,则需要确保调用外部命令
printf
,而不是内置命令。bash的内置命令
printf
支持此格式和区域设置。但是macOS附带的bash版本(v3.2.57)似乎有一个错误,即使用区域设置作为
printf
命令的前缀(例如
LC\u ALL=en\u US printf“%'d\n”$MYVAR
)无法正常工作。但是做一个函数本地语言环境设置(比如
printcoma(){local LC\u ALL=en\u US;printf“%”d\n“$1”}
)和强制一个子shell并在那里设置(比如
(LC\u ALL=en\u US;printf“%”d\n“$MYVAR”)
)都可以。我没有Mac,但使用awk不是一个有效的解决办法吗?例如,
awk“BEGIN{printf\”%%d\n\,ARGV[1]}”1000000
@mosvy,尽管您可能需要再次强制使用数千个逗号的区域设置:
LC\u ALL=en_US awk“BEGIN{printf\”%%d\n\,ARGV[1]}“$MYVAR”