如何使用 printf 打印“-”
Posted
技术标签:
【中文标题】如何使用 printf 打印“-”【英文标题】:How to print "-" using printf 【发布时间】:2018-06-04 08:26:08 【问题描述】:我正在尝试使用printf
多次打印“-”。我正在使用以下命令多次打印相同的字符,这对除“-”之外的所有字符都适用。
printf "`printf '=%.0s' 1..30` \n"
当我尝试对“-”做同样的事情时,它会出错。
printf "`printf '-%.0s' 1..30` \n"
bash: printf: -%: invalid option
它试图将其作为用户传递的选项。我该如何解决这个问题?
【问题讨论】:
@TomFenech 我猜想换行。 【参考方案1】:将--
传递给每个printf
调用:
printf -- "`printf -- '-%.0s' 1..30` \n"
像许多命令一样,printf
采用以-
开头的标记形式的选项(尽管-v
和--
是我知道的唯一选项)。这会干扰您的参数字符串,因为 printf
正在尝试解析 -%.0s
作为选项。然而,对于这种情况,它支持--
选项(与许多其他命令一样),它终止选项解析并逐字传递所有后续参数。
【讨论】:
@Sigura 这工作得很好......它也解决了我的另一个问题......当我们使用 printf 打印具有权限的文件列表时,由于 '-r' in '-rwx'。【参考方案2】:您要打印 30 个连字符吗?我就是这样做的:
printf "%*s\n" 30 "" | sed 's/ /-/g'
printf 命令打印一行有 30 个空格,然后使用 sed 将它们全部变成连字符
这可以封装成一个函数:
ruler() printf "%*s\n" "$1" "" | sed "s/ /$2//\//\\\//g";
然后您可以执行以下操作:
ruler $(tput cols) =
【讨论】:
这可能会有点复杂,如果我想做这样的事情 -- printf "printf '-%.0s' 1..30
\n$$()
而不是反引号以上是关于如何使用 printf 打印“-”的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有来自 c 库的 printf 的情况下在汇编级编程中打印整数?