在 bash 中使用 printf 转义连字符 (--)

在 bash 中使用 printf 转义连字符 (--)

我有以下行:

printf "---- %.55s\n" "$1 --------------"

当我在 bash 下运行此程序时,出现以下错误:

printf:--:无效选项 printf:用法:printf [-v var] 格式 [参数]

这是因为(我认为)printf 将字符串“----”解释为参数的开头。我尝试使用“\”来转义它,如下所示:

printf "\---- %.55s\n" "$1 --------------"

结果如下:

\---- content of $1 -------

正如您所看到的,“\”成为输出的一部分,这不是我想要的。

所以问题是,我怎样才能说服 printf 我不是想传递一个很长的论点

答案1

为了避免参数被-解释为选项,您有几种不同的选择:

1) 将格式字符串中的减号移至参数字符串,可能反映%.s格式说明符中打印字符串的新长度。例如:

$ printf "%.60s\n" "---- $1 --------------"

2)bash的内置命令接受--一个选项,指示它们停止处理选项并将后面的所有内容视为文件名和参数。例如:

$ printf -- "---- %.55s\n" "$1 --------------"

3) 您可以用八进制代码替换减号。实际上,只需替换第一个即可,如下所示:

$ printf "\055--- %.55s\n" "$1 --------------"

相关内容