【问题标题】:printf in bash with double qouted backslashesbash 中的 printf 带有双引号反斜杠
【发布时间】:2022-11-28 21:43:26
【问题描述】:

我正在尝试在 doubleqoutes 中获取 bash printf 以给我“正确”数量的实际打印的反斜杠...... 谁在逃避谁? 为什么 2 个双引号反斜杠给我 1 个打印的反斜杠,而 4 个双引号反斜杠也给我 1 个打印的 1 个反斜杠....? 现在 6 个双引号反斜杠给我 2 个打印的反斜杠,8 个双引号反斜杠也是如此 ....?? 等等... 那么什么/谁在 bash doubleqouted 反斜杠中转义什么/谁......

povje@povje:~$ which bash
/bin/bash
povje@povje:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:        20.04
Codename:       focal

尝试在 bash 中使用 printf 打印双引号反斜杠:

povje@povje:~$ printf "\\"
\povje@povje:~$ printf "\\\\"
\povje@povje:~$ printf "\\\\\\"
\\povje@povje:~$ printf "\\\\\\\\"
\\povje@povje:~$ printf "\\\\\\\\\\"
\\\povje@povje:~$

所以 2个双引号 \ 给我 1 打印
4个
doubleqouted \给我 1 打印
6个doubleqouted \ 给我 2 打印
8个
doubleqouted \ 给我 2 打印
10*doubleqouted \ 给我 3 打印
. .

那么为什么每第二对双引号反斜杠都被忽略了呢?

【问题讨论】:

    标签: bash printf


    【解决方案1】:

    bash 中双引号中的反斜杠很特殊。您需要转义(即反斜杠)双引号中的反斜杠以获得文字反斜杠。使用单引号,您不需要双反斜杠。

    反斜杠在 printf 中也很特殊。您再次需要转义(即反斜杠)反斜杠才能打印出来。

    如果在 printf 的参数中有一个反斜杠后跟一个非特殊字符,则反斜杠被解释为转义,即

    printf ''    # prints 
    printf '\'   # prints  again
    printf '\'  # prints \
    # ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 2015-02-27
      • 2018-02-13
      • 2014-09-11
      • 2016-12-02
      相关资源
      最近更新 更多