![아래 예에서 프로세스 ID가 포함된 작은따옴표와 큰따옴표에 무슨 일이 일어나고 있는지 정확히 설명할 수 있는 사람이 있습니까? [복사]](https://linux55.com/image/6009/%EC%95%84%EB%9E%98%20%EC%98%88%EC%97%90%EC%84%9C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20ID%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%EC%9E%91%EC%9D%80%EB%94%B0%EC%98%B4%ED%91%9C%EC%99%80%20%ED%81%B0%EB%94%B0%EC%98%B4%ED%91%9C%EC%97%90%20%EB%AC%B4%EC%8A%A8%20%EC%9D%BC%EC%9D%B4%20%EC%9D%BC%EC%96%B4%EB%82%98%EA%B3%A0%20%EC%9E%88%EB%8A%94%EC%A7%80%20%EC%A0%95%ED%99%95%ED%9E%88%20%EC%84%A4%EB%AA%85%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8A%94%20%EC%82%AC%EB%9E%8C%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
[root@localhost ~]# echo $$
16991
[root@localhost ~]# bash -c "echo $$"
16991
[root@localhost ~]# bash -c "echo $$"
16991
[root@localhost ~]# bash -c 'echo $$'
21062
[root@localhost ~]# bash -c 'echo $$'
21063
[root@localhost ~]# bash -c 'echo $$'
21064
[root@localhost ~]# bash -c "echo $$"
16991
내가 아는 한, 작은 따옴표를 사용할 때마다 새로운 하위 쉘이 생성되고 큰 따옴표에서는 같은 일이 발생하지 않습니다. 왜 그럴까요?
답변1
요약: 쉘은 큰따옴표로 묶인 문자열에 대해 매개변수 대체를 수행하지만아니요작은 따옴표로 묶인 문자열. $$
은 쉘 PID이지만 표시되는 숫자는 다음에 따라 다릅니다.어느쉘이 이를 평가합니다.
세부 사항: 각 상황을 한 번에 하나씩 고려해 봅시다.
[root@localhost ~]# echo $$
16991
16991은 현재 쉘의 PID입니다. 이를 메인 쉘이라고 부릅니다.
[root@localhost ~]# bash -c "echo $$"
16991
메인 쉘에서 이를 발견하면 "echo $$"
16991로 대체됩니다 $$
. 따라서 전달된 문자열 bash -c
은 입니다 echo 16991
. 이것이 16991이 인쇄되는 이유입니다.
[root@localhost ~]# bash -c 'echo $$'
21062
작은따옴표 때문에 'echo $$'
기본 쉘은 매개변수 대체를 수행하지 않습니다. 문자열은 .21062 echo $$
로 전달되어 bash -c
프로세스의 PID이므로 인쇄됩니다 bash -c
.
[root@localhost ~]# bash -c 'echo $$'
21063
다음에 bash -c
프로세스가 실행되면 이번에는 21063이라는 새로운 PID를 갖게 됩니다.
답변2
작은 따옴표는 강한 따옴표이며 bash는 이를 큰 따옴표와 같은 문자열이 아닌 인수로 읽습니다. -c 옵션을 사용하여 bash를 호출하면 문자열이 아닌 인수를 위치 인수로 사용하도록 지시합니다. 작은따옴표는 문자열이 아니므로 위치 명령문으로 해석되어야 합니다.