새 컴퓨터에 bash 스크립트 작성, 코드 이스케이프 [중복]

새 컴퓨터에 bash 스크립트 작성, 코드 이스케이프 [중복]

어딘가에 그런 문제가있을 수 있습니다. 하지만 쉽게 찾을 수가 없었습니다.

기본적으로 새 상자에 bash 스크립트를 작성하고 싶습니다. 이전에 사용했던 스크립트입니다.

예:

#!/bin/bash -ex
hi='hello world!'
echo $hi

나는 항상 (여러 줄 출력용)을 사용합니다.

cat > script.sh <<EOF
#!/bin/bash -ex
hi='hello world!'
echo $hi
EOF

그러나 $hi 및 기타 기호에 문제가 있음을 눈치챘을 것입니다. 이를 수행할 수 있는 좋은 방법이 있습니까? 팁과 요령?

답변1

파일 끝 표시를 인용해야 합니다. 그렇지 않으면 변수 확장(또는 로 시작하는 모든 것이 $현재 컨텍스트를 가져옵니다.

비교하다:

hi=here
cat >file.sh <<EOF
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh

(출력 here)

hi=here
cat >file.sh <<\EOF
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh

산출there

hi=here
cat >file.sh <<'EOF'
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh

출력 there.

또는 다음을 인용할 수 있습니다 $.

hi=here
cat >file.sh <<EOF
#!/bin/sh
hi=there
echo \$hi
EOF
sh file.sh

(출력 there)

처음에는 이 놀라운 동작이 다양한 목적을 위해 약간 다른 스크립트를 생성해야 할 때 유용합니다.

답변2

나는 그것을 알아 냈을지도 모른다고 생각합니다. 다른 사람들이 이 문제를 어떻게 해결했는지 여전히 관심이 있습니다.

cat > script.sh <<'EOF'
#!/bin/bash -ex
hi='hello world!'
echo $hi
EOF

freebsd에는 다음이 필요한 것 같습니다.

cat > script.sh <<'EOF'
#!/bin/bash -ex
hi='hello world!'
echo $hi
'EOF'

관련 정보