문제를 피하지 않고 간단한 "검색 및 바꾸기"를 수행할 수 있는 bash 솔루션이 있습니까? <!-- JavaScript -->
HTML 파일을 복잡한 자바스크립트 파일의 내용으로 바꾸려고 합니다 .
나는 열심히 노력했다
JS=$(<"path to javascript file")
sed "s|<!-- JavaScript -->|${JS}|g" "path to html file" > "path to html file"
하지만 당신이 얻는 한
sed: -e Ausdruck #1, Zeichen 16: Nicht beendeter `s'-Befehl
Powershell에서 나는
$CSS = Get-Content "path to javascript file"
(Get-Content "path to html file").replace('<!-- JavaScript -->', $JS) | Set-Content "path to html file" -Force
그것은 매력처럼 작동하며 문제에서 벗어날 수 없습니다.
업데이트(하지만 둘 중 하나도 작동하지 않음):
JS=$(<"${TemporaryPath}/${Project}/${Project}.js")
E='!'
sed "s|<${E}-- JavaScript -->|${JS}|g" "path to html file" > "path to html file"
알겠어요 sed: -e Ausdruck #1, Zeichen 68: Nicht beendeter s'-Befehl
. $JS의 내용을 "foo"와 같은 기본적인 내용으로 변경하면 작동합니다. $JS의 자바스크립트 내용에 문제가 있는 것은 아닐까요? $JS의 내용을 관련성 없게 만들려면 어떻게 해야 합니까?
답변1
문제는 bash가 느낌표를 해석하고 있다는 것입니다. 불행하게도 백슬래시로 이스케이프하는 것은 작동하지 않습니다. 다른 변수에 넣거나 변수가 큰따옴표로 묶인 동안 작은따옴표로 묶으면 모든 것이 잘됩니다. . .
$ ARG="mytest"
$ echo "hello $ARG!"
bash: !": event not found
$ # didn't work
$ echo "hello $ARG\!"
hello mytest\!
$ # didn't work either!
$ echo "hello $ARG"'!'
hello mytest!
$ # that's better
$ E='!'
$ echo "hello $ARG$E"
hello mytest!
$ I like this one best.
답변2
큰따옴표 대신 작은따옴표를 사용하세요.
[alexus@wcmisdlin02 Downloads]$ test="testing"
[alexus@wcmisdlin02 Downloads]$ echo "$test"
testing
[alexus@wcmisdlin02 Downloads]$ echo '$test'
$test
[alexus@wcmisdlin02 Downloads]$