Bash
從多行 heredocument 到單行 herestring,帶有換行符
我有這個多行的 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引用:$ cat <<< $'this\nthat' this that
此外,由於引號,這將嘗試在字面上命名的目錄中創建一個文件
*
:cat > "/etc/php/*/zz_overrides.ini"
這可以在 Bash 中使用,但前提是 glob 匹配一個文件(如果你有
/etc/php/foo/zz_overrides.ini
and/etc/php/bar/zz_overrides.ini
,Bash 會出錯)cat > /etc/php/*/zz_overrides.ini