명령 대체에서 백슬래시의 이상한 동작을 설명할 수 있는 사람이 있습니까?

명령 대체에서 백슬래시의 이상한 동작을 설명할 수 있는 사람이 있습니까?

나는 그것을 bash에서 찾았습니다.

echo `echo \\`

출력 \

\

하지만

echo `echo \\ `

아무것도 출력되지 않습니다

답변1

이것백슬래시 스타일 명령 대체에서 백슬래시의 문서화된 동작은 다음과 같습니다.:

이전 스타일의 백틱 대체 형식을 사용하는 경우 백슬래시는 "$", "`" 또는 "\"가 뒤에 오지 않는 한 문자 그대로의 의미를 유지합니다.

즉, 백슬래시는 달러 기호, 백틱 및 백틱을 이스케이프합니다.기타 백슬래시처리를 위해 쉘에 명령을 제공하기 전(백슬래시 이스케이프 및 따옴표의 일반적인 처리 전 포함) 이는 다음을 의미합니다.

`echo \\ `

동등하다

$(echo \ )

그리고 공백을 출력합니다. 해당 단일 공백은 인수로 외부에 삽입된 다음 일반적으로 필드 분할 중에 손실되므로 인수 없이 실행 echo됩니다 .echo

반면에

`echo \\`

\명령 끝에 매달린 부분을 두는 것은 일반적으로 불법이며(다른 곳에서 해당 줄을 계속하라는 의미임) 리터럴로 처리됩니다. bash둘 다 dash좋아 tcsh하지만 zsh그렇지 않습니다. 명시적으로 명시되지 않은 것 같습니다.POSIX에서는또는 다른 곳에서는 이것이 구현 정의 동작이라고 가정합니다.


대신 $( ... )명령 대체를 사용하면 중단 없이 모든 스크립트를 작성할 수 있습니다. 백틱 교체보다 거의 항상 낫습니다.

관련 정보