如何在bash printf的格式字符串中包含破折号?

tin*_*lyx 4 bash printf

我正在尝试printf按照此处的示例使用 bash 连接字符串:

$ printf "%s " "hello printf" "in" "bash script"
Run Code Online (Sandbox Code Playgroud)

以上工作。但是当我尝试将一些破折号 ( -)添加到格式字符串时:

$ printf "--file=%s " "hello printf" "in" "bash script"
Run Code Online (Sandbox Code Playgroud)

它产生一个错误:

sh: printf: --: 无效选项

显然,它将格式字符串视为一个选项。如何-在输出中包含破折号?

(我试图添加 use\-来逃避破折号,但无济于事。)

Ini*_*ian 5

使用涉及--. 通常,shell 命令需要知道它们的位置参数从哪里开始。因此,通过强制--afterprintf我们让它知道后续参数将被解释为它的参数。此时,之后使用--将按字面意思处理,而不是被视为命令行开关。

所以定义你printf

printf -- "--file=%s " "hello printf" "in" "bash script"
Run Code Online (Sandbox Code Playgroud)

此外,如果您计划指定多个printf参数字符串,请不要将它们包含在相同的格式说明符中。你可能需要这个

printf -- "--file=%s %s %s" "hello printf" "in" "bash script"
Run Code Online (Sandbox Code Playgroud)

查看更多关于bash 中的 printf 命令

  • 鉴于示例中的参数,OP 更有可能需要 `for f in "hello printf" "in" "bash script"; 做 args+=(--file "$f")` 而不是 `printf`。 (2认同)