답변:
여기에는 두 가지 껍질이 있습니다.
이것을 호출하는 대화식 쉘인 호출 쉘
비 로그인, 비 대화식 쉘 bash -c
이제 문제는 큰 따옴표 안에 변수가 각각의 값으로 확장된다는 것입니다. 이것은 모든 쉘에 해당됩니다.
따라서 큰 따옴표를 사용한 것처럼 변수 확장 $v은 실제로 호출 된 쉘이 아니라 호출 된 쉘에서 발생합니다. 그러나 선언 v=value된은 비대화 형 쉘에서 발생합니다.
따라서 전체적으로 호출 된 쉘에 변수가 정의되고 호출 쉘에서 확장 (미리)됩니다. 호출 변수에 value 변수가 설정되어 있지 않으므로 결과물에 아무것도 표시되지 않습니다.
이제 생성 된 쉘에서 변수 정의 및 확장을 수행하려면 작은 따옴표 또는 이스케이프를 사용하십시오 $.
$ bash -c "v=value; echo $v"
$ bash -c 'v=value; echo $v'
value
$ bash -c "v=value; echo \$v"
value
큰 따옴표 $v는 대화식 쉘로 대체됩니다. 작은 따옴표를 사용하십시오.
$ bash -c 'v=value;echo $v'
value