stdin을 통해 bash에 명령을 제공할 때 변수를 사용할 수 없습니다.

stdin을 통해 bash에 명령을 제공할 때 변수를 사용할 수 없습니다.

C popen 호출(calls)을 사용하여 sh -c '<command>'작은 쉘 스크립트를 실행 해야 합니다. 스크립트를 실행할 수 없습니다. 나는 이 조각으로 문제를 분리했습니다.

#!/bin/bash

sh -c 'bash -xev -s << EOF
a=1
echo "a=$a"
EOF'

어느 출력

a=1
+ a=1
echo "a="
+ echo a=
a=

내가 무엇을 놓치고 있나요? 왜 stdin의 변수를 사용할 수 없나요?

(버전: GNU bash 5.1.4, 대시 0.5.11+git20200708+dd9ef66-5)

답변1

EOF다음 섹션을 인용하거나 이스케이프 처리하지 않는 한 여기에 있는 문서의 본문에는 매개변수 확장, 명령 대체 및 산술 확장이 적용됩니다.

$ sh -c 'bash -xev -s << \EOF
a=1
echo "a=$a"
EOF'
a=1
+ a=1
echo "a=$a"
+ echo a=1
a=1

"EOF"일반 따옴표 또는 를 사용할 수도 있습니다 'EOF'.

쉘이 전체 변수가 아닌 일부 변수를 확장하려는 경우와 같이 더 복잡한 경우에는 해당 변수를 EOF따옴표로 묶지 않고 특정 변수를 이스케이프할 수 있습니다. 예를 들어 \$a- 참조

관련 정보