【问题标题】:Unix Print Output on One LineUnix 在一行上打印输出
【发布时间】:2011-10-22 18:55:10
【问题描述】:

我正在创建一个 Unix .bash_profile 脚本,但遇到了一个小问题。这是我的代码的 sn-p:

echo -n "Welcome "
whoami
echo -n "!"

我希望输出是这样的:

Welcome jsmith!

...相反,我得到的是这样的:

Welcome jsmith
!

我怎样才能将所有这些放在一条线上?任何帮助是极大的赞赏。如果这有帮助,我将在 Ubuntu Server 10.04 LTS 上使用 Bash Shell。

【问题讨论】:

    标签: bash unix shell command-line ubuntu


    【解决方案1】:

    您可以插入$(command)(新样式)或`command`(旧样式)将命令的输出插入到双引号字符串中。

    echo "Welcome $(whoami)!"
    

    注意:在脚本中这可以正常工作。如果您在交互式命令行中尝试,最终的! 可能会给您带来麻烦,因为! 会触发history expansion

    命令替换

    命令替换允许命令的输出替换命令名称。有两种形式:

    $(command)
    

    `command`
    

    Bash 通过执行命令并将命令替换替换为命令的标准输出来执行扩展,删除任何尾随换行符 [强调添加]

    【讨论】:

    • 谢谢,约翰。顺便说一句,“!”很好。 ;) 这正是我所需要的!
    【解决方案2】:

    使用此表格。摆脱echo 并摆脱创建subshel​​l

    printf 'Welcome %s!\n' "$USER"
    

    【讨论】:

      【解决方案3】:

      试试这个:

      echo -ne "Welcome `whoami`!\n"
      

      echo -ne "Welcome $(whoami)!\n"
      

      【讨论】:

      • 第一个版本可以,第二个不行。 -ne 不会抑制由 whoami 创建的 \n。
      【解决方案4】:

      你可能想要:

      echo "Welcome $(whoami)!"
      

      $() 构造执行其中的命令,并评估它的输出。

      另一种选择是:

      {
          echo "Welcome "
          whoami
          echo "!"
      } | tr -d '\n'
      

      虽然这有点疯狂。

      无论您做什么,都可能需要在 ! 周围加上单引号。在我的 shell 中,! 是一个历史元字符,即使在双引号中也是如此。

      【讨论】:

        【解决方案5】:

        你可以这样做:

            echo "Welcome `whoami`!"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-26
          • 2019-02-02
          • 1970-01-01
          • 2015-09-29
          • 2017-09-08
          • 1970-01-01
          相关资源
          最近更新 更多