如何使用 printf 打印“-”

How to print "-" using printf

我正在尝试使用 printf 多次打印“-”。我正在使用下面的命令多次打印相同的字符,这对除“-”以外的所有字符都有效。

printf "`printf '=%.0s' {1..30}` \n"

当我尝试对“-”做同样的操作时,出现错误。

printf "`printf '-%.0s' {1..30}` \n"
bash: printf: -%: invalid option

它试图将其作为用户传递的选项。我该如何解决这个问题?

在每个 printf 调用之前将 -- 传递给每个 printf 调用:

printf -- "`printf -- '-%.0s' {1..30}` \n"

与许多命令一样,printf 采用以 - 开头的标记形式的选项(尽管 -v-- 是我所知道的唯一选项)。这会干扰您的参数字符串,因为 printf 试图将 -%.0s 解析为一个选项。但是,对于这种情况,它支持 -- 选项(与许多其他命令一样),该选项终止选项解析并逐字传递所有后续参数。

您要打印 30 个连字符吗?我就是这样做的:

printf "%*s\n" 30 "" | sed 's/ /-/g'

printf 命令打印一行 30 个空格,然后使用 sed 将它们全部变成连字符

这个可以封装成一个函数:

ruler() { printf "%*s\n" "" "" | sed "s/ /${2//\//\\/}/g"; }

然后您可以执行以下操作:

ruler $(tput cols) =