尝试从多个语句中收集输出

时间:2015-04-03 22:20:24

标签: bash pipe output echo cat

有没有办法包装所有这些写(双关语)不仅```在temp.md

echo "\`\`\`" && cat temp.txt && echo "\`\`\`" > temp.md

2 个答案:

答案 0 :(得分:2)

使用单引号更简单(不需要反斜杠):

{ echo '```' && cat temp.txt && echo '```'; }  >temp.md

或者,如果您希望更好地控制输出格式,printf很方便:

printf '```\n%s\n```\n' "$(cat temp.txt)" >temp.md

为什么要使用单引号?

来自man bash

  

用单引号括起字符可保留引号中每个字符的字面值。单引号可以   单引号之间不会出现,即使前面有反斜杠。

换句话说,您可以将任何内容放在单引号内,但单引号除外,它将保持不变。不需要逃脱。

相比之下,shell处理双引号内的字符。来自man bash

  

用双引号括起字符会保留引号内所有字符的字面值,但$除外,   `   \,并且,当启用历史记录扩展时,!。

例如,在双引号内,shell将执行变量替换,命令替换和算术扩展。除非你想要发生这些事情,否则不要使用双引号。

答案 1 :(得分:0)

发现它!

(echo "\`\`\`" && cat temp.txt && echo "\`\`\`") > temp.md