어딘가에 그런 문제가있을 수 있습니다. 하지만 쉽게 찾을 수가 없었습니다.
기본적으로 새 상자에 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'