【问题标题】:Formatting with echo command使用 echo 命令格式化
【发布时间】:2010-03-11 20:14:21
【问题描述】:

实际情况有点复杂,但我遇到的问题是我在 eval 命令中有一个 echo 命令。像这样:

$ eval echo 'keep   my     spacing'
keep my spacing
$ echo 'keep   my     spacing'
keep   my     spacing

我想知道如何防止 eval 去除我的间距,以便第一个命令打印出与第二个命令相同的消息...


这是一个更接近实际情况的示例:

$ eval `python -c 'print "echo \"keep    my     spacing\""'`
keep my spacing

【问题讨论】:

    标签: linux bash unix eval echo


    【解决方案1】:

    eval echo "'keep my spacing'"

    【讨论】:

      【解决方案2】:
      eval "echo 'keep   my     spacing'"
      keep   my     spacing
      

      如果这对您不起作用,请根据实际情况说明更多。

      【讨论】:

      • 好的。所以我有一个 Python 脚本,它正在设置对环境的修改......别名、环境变量......它的这一部分需要用 eval 进行评估并且工作正常。最后,我还想打印一些消息。在运行 eval 之前,一切都很好并且间隔很好。 eval 删除了我所有的格式并生成了一长串文本......不过它确实保留了换行符。
      【解决方案3】:

      不是eval的错:

      `python -c 'print "echo \"keep    my     spacing\""'`
      

      打印

      "keep my spacing"
      

      您可以这样做:

      python -c 'print "echo \"keep    my     spacing\""' | bash
      

      打印出来

      keep    my     spacing
      

      【讨论】:

        【解决方案4】:

        问题(在 python 示例中)是命令替换(反引号表达式)不受引号保护。要解决此问题,请在其周围加上双引号(为了使引号嵌套更好,请使用 $() 而不是反引号):

        eval "$(python -c 'print "echo \"keep    my     spacing\""')"
        

        【讨论】:

          【解决方案5】:

          或者考虑 printf -v

          【讨论】:

            【解决方案6】:
            $ .

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-09-04
              • 2010-11-09
              • 2011-10-10
              • 1970-01-01
              • 2021-08-19
              • 2013-10-18
              • 2012-03-29
              • 1970-01-01
              相关资源
              最近更新 更多