如何在bash的printf格式字符串中包含短横线(-)?
解决bash中printf格式字符串以
--开头时的"invalid option"错误 我明白你遇到的问题——当你想用printf输出以--开头的格式化内容时,bash内置的printf会把你的格式字符串误判成命令选项,从而抛出sh: printf: --: invalid option的错误。转义短横线没用是因为bash在解析命令选项的阶段,还没处理转义字符就已经把--当成选项标记了。
这里有几个可靠的解决办法:
方法1:用--终止选项解析
这是最标准的Unix命令行处理方式,--会告诉printf后面的所有内容都是位置参数,不再解析为选项:
printf -- "--file=%s " "hello printf" "in" "bash script"
执行后会输出:
--file=hello printf --file=in --file=bash script
方法2:将格式字符串存入变量后调用
把格式字符串放到变量里,再传给printf,这样bash不会把变量内容当成命令选项解析:
format_str="--file=%s " printf "$format_str" "hello printf" "in" "bash script"
这个方法和上面的效果完全一致,适合需要重复使用格式字符串的场景。
方法3:调用外部printf二进制(不推荐但可用)
bash默认用的是内置的printf命令,你可以直接调用系统的外部printf二进制文件,它不会解析选项:
/usr/bin/printf "--file=%s " "hello printf" "in" "bash script"
不过这种方法不如前两种通用,因为不同系统的printf路径可能有差异,优先推荐前两种方法。
内容的提问来源于stack exchange,提问作者thor
相关产品推荐
相关产品推荐

