如何在echo命令同一行中嵌入执行其他命令并输出结果?
Shell中自定义文本与命令执行结果同行输出的实现方案
你使用echo 'hostname:' hostname无法得到预期效果,原因是该写法中hostname会被shell识别为普通字符串参数,不会实际触发命令执行。
要实现自定义文本和命令返回结果拼接后同行输出,需要使用shell的命令替换能力:shell会优先执行命令替换语法包裹的命令,将其标准输出结果替换到对应位置,再执行外层的输出逻辑。
可用写法
- 推荐写法(POSIX标准兼容、可读性强、支持命令嵌套):用
$()包裹待执行的命令
执行该命令后即可得到echo "hostname: $(hostname)"hostname: cpu1这类预期输出,其中cpu1是hostname命令实际返回的主机名结果。 - 传统兼容写法:用反引号包裹待执行的命令
该写法效果和echo "hostname: `hostname`"$()写法完全一致,但反引号在多层命令嵌套的场景下容易出现转义冲突,日常使用优先选$()写法即可。
关键注意点
包含命令替换的整段内容必须用双引号包裹,不能使用单引号:单引号属于强引用,内部的所有特殊语法都会失效,如果写成echo 'hostname: $(hostname)',会原样输出hostname: $(hostname),不会触发命令执行。
该拼接方式支持同时嵌入多个命令的执行结果,例:
echo "hostname: $(hostname), current user: $(whoami), system time: $(date +%F)"
内容的提问来源于stack exchange,提问作者João
相关产品推荐
相关产品推荐

