如何使用printf打印“ - ”

时间:2017-12-21 16:09:16

标签: bash printf

我正在尝试使用printf多次打印“ - ”。我正在使用下面的命令进行相同字符的多重打印,除了“ - ”之外,它适用于所有人。

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

当我尝试对“ - ”执行相同操作时,会出错。

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

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

2 个答案:

答案 0 :(得分:3)

--调用的所有其他内容之前传递printf

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

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

答案 1 :(得分:1)

你想打印30个连字符吗?这就是我这样做的方式:

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

printf命令打印一个包含30个空格的行,然后使用sed将它们全部转换为连字符

这可以封装成一个函数:

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

然后你可以做类似的事情:

ruler $(tput cols) =