首页 > 解决方案 > 是否可以将 HERE 文档和重定向结合起来写入文件而不在 Bash 中生成过程?

问题描述

是否可以将 HERE 文档和重定向结合起来写入文件而不在 Bash 中生成过程?

标准解决方案涉及cat命令,它是一个单独的进程,而不是内置命令:

cat >my.cfg <<EOF
user = 'me'
dir = "$PWD"
EOF

echo可以使用,但涉及引用和重复(这里文档简化了引用!):

echo "user = 'me'" >>my.cfg
echo "dir = "'"'"$PWD"'"' >>my.cfg

还有另一种带有多行引号的回声样式,并且仍然引用使代码有点复杂:

echo "user = 'me'
dir = \"$PWD\"" >my.cfg

我特别在寻找不依赖fork()的解决方案,使用一些 Bash 技巧 + HERE 文档来避免引用问题(引用$符号除外)......

标签: bashstdoutio-redirectionheredoc

解决方案


这使用内置的 printf,所以没有分叉或产生进程

printf 'user = %q\ndir = %q\n' 'me' "$PWD" >my.cfg

或者:

printf 'user = %q
dir = %q
' 'me' "$PWD" >my.cfg

推荐阅读