我有以下几行:
printf "---- %.55s\n" "$1 --------------"
Run Code Online (Sandbox Code Playgroud)
当我在 bash 下运行它时,出现以下错误:
printf: --: 无效选项 printf: 用法: printf [-v var] 格式 [参数]
这是因为(我认为) printf 将字符串“----”解释为参数的开头。我试图使用“\”来逃避这个,就像这样:
printf "\---- %.55s\n" "$1 --------------"
Run Code Online (Sandbox Code Playgroud)
结果如下:
\---- content of $1 -------
如您所见,“\”成为输出的一部分,这不是我想要的。
所以问题是,我怎样才能说服 printf 我不想传递一个长论点?
小智 7
为避免将参数开始-
解释为选项,您有几种不同的选择:
1) 将格式字符串的减号移动到参数字符串,可能反映%.s
格式说明符中打印字符串的新长度。如:
$ printf "%.60s\n" "---- $1 --------------"
Run Code Online (Sandbox Code Playgroud)
2)bash
的内置命令接受--
作为一个选项,指示它们停止处理选项并将后面的所有内容视为文件名和参数。如:
$ printf -- "---- %.55s\n" "$1 --------------"
Run Code Online (Sandbox Code Playgroud)
3)您可以用八进制代码替换减号。实际上,只替换第一个是有效的,如下所示:
$ printf "\055--- %.55s\n" "$1 --------------"
Run Code Online (Sandbox Code Playgroud)