【问题标题】:How to echo #!/ using shell or bash [duplicate]如何使用 shell 或 bash 回显 #!/ [重复]
【发布时间】:2014-10-28 12:33:28
【问题描述】:

我正在尝试通过 Bash 打印 #!/,但它不打印它,而是打印以下内容。

parth@parth-ubuntu64:$ echo "#!\/"
bash: !\/: event not found

编辑: 请允许我再做一次更新。您如何进行以下工作?我想我应该只使用 python 而不是 bash。我之所以尝试这样做是因为,我想将其通过管道传输到需要 sudo 权限的文件中。这是我可以执行的唯一方法 sudo => sudo sh -c " echo something > file "

sh -c 'echo \'#!/bin/bash \' '

【问题讨论】:

  • 你只是想回显那些文字字符?
  • 带单引号:echo '#!/'.
  • 也许这个echo '#!\/'
  • 也可以转义感叹号:echo \#\!/
  • 回复:您的编辑:sh -c 'echo "#!/bin/bash"' 将起作用:sh 没有像 Bash 这样的历史记录,在这一行中,! 在单引号字符串中,所以你不会有历史扩展。

标签: bash


【解决方案1】:

在双引号内(并启用历史扩展),! 具有特殊含义。要从字面上打印这些字符,请使用单引号而不是双引号:

$ echo '#!\/'
#!\/

可以在交互式 shell 中使用 set +H 禁用历史扩展,这允许您使用双引号:

$ set +H
$ echo "#!\/"
#!\/

一般来说,如果你不需要对变量进行插值(比如本例),你应该使用单引号。

请注意,/ 没有必要转义,因此如果您想要的输出是 #!/,则可以从其前面删除 \

$ echo '#!/'
#!/

【讨论】:

    【解决方案2】:

    在交互式 shell 中 ! 会受到历史扩展的影响。例如,!! 是您键入的最后一个命令,!$ 是该命令的最后一个参数。为避免历史扩展,请使用反斜杠转义 ! 或使用单引号。

    echo '#!/'
    

    这在 shell 脚本中不是必需的,只有在交互式 shell 中才需要(除非您在 shell 脚本中有意启用 set -o historyset -o histexpand)。

    请允许我再做一次更新。您如何进行以下工作?

    sh -c 'echo \'#!/bin/bash \' '
    

    单引号内不能有单引号。 \' 不起作用。所以回到双引号。

    sh -c "echo '#\!/bin/bash'"
    

    【讨论】:

    • 你也可以交换'",就像我对OP的评论一样:sh -c 'echo "#!/bin/bash"'
    【解决方案3】:

    有些内容在双引号内解释,包括反斜杠和感叹号引入的历史事件。改用更强大的单引号:

    echo '#!\/'
    

    【讨论】:

    • 其实我现在明白你想说什么了。 :) 它确实有效
    【解决方案4】:

    您需要将文本放在单引号内,这样它就不会被解析。

    $ echo '#!/'
    #!/
    $ echo '#!\/'
    #!\/
    

    【讨论】:

      【解决方案5】:

      使用单引号而不是双引号。

      echo '#!/'
      

      【讨论】:

        猜你喜欢
        • 2016-10-08
        • 2019-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-17
        • 2011-02-13
        • 2016-10-16
        相关资源
        最近更新 更多