我正在创建一个Unix .bash_profile脚本,我遇到了一个小问题。以下是我的代码片段:
echo -n "Welcome "
whoami
echo -n "!"
我希望输出结果如下:
Welcome jsmith!
......相反,我得到的是这样的东西:
Welcome jsmith
!
如何将所有这些放到一行?任何帮助是极大的赞赏。如果这有帮助,我在Ubuntu Server 10.04 LTS上使用Bash Shell。
答案 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`!"