我有以下行:
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 --------------"