我有这个 multilinie heredocument,我希望将其翻译成单行 herestring:
cat <<-"PHPCONF" > /etc/php/*/zz_overrides.ini
[PHP]
post_max_size = 200M
upload_max_filesize = 200M
cgi.fix_pathinfo = 0
PHPCONF
我能得到的最接近如下:
cat >"/etc/php/*/zz_overrides.ini" <<< "[PHP] post_max_size = 200M upload_max_filesize = 200M cgi.fix_pathinfo = 0"
但我不认为在每个指令之后换行是可能的,因为最终结果是一个string。也许毕竟有一些“非正统”的方式?
heredoc 和 herestring 都旨在替换这个繁重的 sed 操作:
sed -i "s/post_max_size = .M/post_max_size = 200M/ ; s/upload_max_filesize = .M/upload_max_filesize = 200M/ ; s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php/*/fpm/php.ini
撇开你可以的事实不谈
printf "this\nthat\n" > /some/file
,你可以用换行符创建一个here-string,例如ANSI-C引用:此外,由于引号,这将尝试在字面上命名的目录中创建一个文件
*
:这可以在 Bash 中使用,但前提是 glob 匹配一个文件(如果你有
/etc/php/foo/zz_overrides.ini
and/etc/php/bar/zz_overrides.ini
,Bash 会出错)我认为
bash
允许您直接使用带有换行符的字符串,无需使用heredoc,或调用外部命令(如cat
):