单行Unix打印输出

时间:2011-08-08 22:16:39

标签: bash unix shell command-line ubuntu

我正在创建一个Unix .bash_profile脚本,我遇到了一个小问题。以下是我的代码片段:

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

我希望输出结果如下:

Welcome jsmith!

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

Welcome jsmith
!

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

5 个答案:

答案 0 :(得分:4)

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

echo "Welcome $(whoami)!"

注意:在脚本中,这将正常工作。如果您在交互式命令行中进行尝试,最终的!可能会因!触发history expansion而导致您遇到麻烦。

  

命令替换

     

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

$(command)
     

`command`
     

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

答案 1 :(得分:4)

使用此表单。摆脱echo并远离创建子shell

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

答案 2 :(得分:2)

试试这个:

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

OR

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

答案 3 :(得分:0)

你可能想要:

echo "Welcome $(whoami)!"

$()构造在其中执行命令,并计算其输出。

另一种选择是:

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

虽然这有点疯狂。

无论你做什么,你都可能需要!周围的单引号。在我的shell中,!即使在双引号内也是历史元字符。

答案 4 :(得分:0)

您可以执行以下操作:

    echo "Welcome `whoami`!"