Jac*_*lin 3 unix bash printf bsd verbatim
为了使我的代码可移植,我尝试使用printf
而不是echo
.但是之后
printf "-dogs-cats"
Run Code Online (Sandbox Code Playgroud)
返回错误.本案的解决方法是:
printf "-";printf "dogs-cats"
Run Code Online (Sandbox Code Playgroud)
但是有一个通用的,可移植的命令(或一个选项printf
),它将打印任意字符串作为文字/逐字,而不是尝试将字符串解释为格式?
我在BSD UNIX(在Mac上)工作,但我的目标是在其他UNIX风格中也可以使用的代码.
只需使用--
after就printf
可以让它知道不再有任何参数来考虑字符串:
$ printf -- "-dogs-cats"
-dogs-cats # no new line after this
Run Code Online (Sandbox Code Playgroud)
这是一个*NIX技巧,可以用于许多其他命令.正如Bash参考手册→4 Shell Builtin命令所说:
除非另有说明,否则每个内置命令都记录为接受以' - ' 开头的选项,接受' - '表示选项的结束.:,true,false和test builtins不接受选项,也不特别对待' - '.exit,logout,return,break,continue,let和shift builtins接受并处理以' - '开头的参数,而不需要' - '.其他接受参数但未指定为接受选项的内置函数将以" - "开头的参数解释为无效选项,并且需要使用" - "来阻止此解释.
请注意为什么会这样:
$ printf "-dogs-cats"
bash: printf: -d: invalid option
printf: usage: printf [-v var] format [arguments]
Run Code Online (Sandbox Code Playgroud)
这使得printf
理解字符串的第一部分-d
,作为参数.
归档时间: |
|
查看次数: |
1434 次 |
最近记录: |