여러 줄의 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"

하지만 내 생각엔 아닌 것 같아개행 문자각 명령어가 실행 가능해지면 최종 결과는 다음과 같다고 가정합니다.. 결국 "비정통적인" 방법이 있는 것은 아닐까?


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

답변1

printf "this\nthat\n" > /some/file예를 들어 ANSI-C 인용을 사용하여 개행 문자가 포함된 here-string을 만들 수 있다는 사실은 제쳐두세요 .

$ cat <<< $'this\nthat'
this
that

또한 따옴표로 인해 다음과 같은 이름의 디렉터리에 파일을 생성하려고 시도합니다 *.

cat > "/etc/php/*/zz_overrides.ini"

이는 Bash에서 작동하지만 glob이 파일과 일치하는 경우에만 작동합니다( /etc/php/foo/zz_overrides.ini및 가 있으면 Bash는 오류를 표시합니다 /etc/php/bar/zz_overrides.ini).

cat > /etc/php/*/zz_overrides.ini

답변2

heredoc이 필요하지 않거나 외부 명령(예 : ) bash을 호출할 필요 없이 개행 문자가 포함된 문자열을 직접 사용할 수 있다고 생각합니다 .cat

$ php_conf='
  [PHP]
  post_max_size = 200M
  upload_max_filesize = 200M
  cgi.fix_pathinfo = 0
'

$ echo "$php_conf"

 [PHP]
 post_max_size = 200M
 upload_max_filesize = 200M
 cgi.fix_pathinfo = 0

관련 정보