Composer가 포함된 WSL Ubuntu 16.04(Xenial)에서 다음을 실행했습니다.
echo 2 * 3 > 5 is a valid inequality
5
다음 내용으로 이름이 지정된 파일이 생성되었습니다 .
2composer-setup.php 3은 유효한 부등식입니다.
echo
여기에도 텍스트가 포함되는 이유는 모르겠습니다 . composer-setup.php
5(파일 이름)를 제외하고 왼쪽에서 오른쪽으로 모든 내용을 포함해야 합니다. echo
단일 텍스트 스트림을 리디렉션된 파일 이름으로 사용할 수 있기 때문입니다(내가 아는 한에는 그렇지 않습니다). 공백이 허용되므로 이름이 5
)입니다.
composer-setup.php
왜 2~3 사이에 나오는 걸까요 ?
답변1
실행한 명령줄에는 두 개의 셸 특수 문자( *
및 ) 가 포함되어 있습니다 >
. 당신이 보는 것은 현재 디렉토리에 있는 모든 1개의>
파일을 선택하는 와일드카드/와일드카드 입니다 . 현재 디렉토리에 Composer-setup.php라는 파일이 있습니다.*
명령줄을 인용하세요. 텍스트에 작은따옴표가 없으면 작은따옴표가 작동합니다.
echo '2 * 3 > 5 is a valid inequality'
1: 쉘 옵션(예: dotglob)을 특별히 설정하지 않는 한 마침표로 시작하지 않는 모든 파일(또는 디렉터리, 소켓 등)~할 수 있게 하다파일 와일드카드를 클릭합니다.
답변2
여기서는 두 가지 일이 일어나고 있습니다.
먼저, 쉘은 *
문자를 확인하고 이를 현재 디렉토리의 파일 목록으로 대체합니다. 이것을 '와일드카드'라고 합니다.
또한 > 5
리디렉션 명령으로 처리됩니다.
그래서
echo 2 * 3 > 5 is a valid inequality
다음과 같이 구문 분석됩니다.
echo 2 * 3 is a valid inequality > 5
그러면 내용이 "2"인 "5"라는 파일이 생성됩니다.현재 파일 목록3은 유효한 부등식이다.”
이런 일이 발생하지 않도록 하려면 따옴표를 사용해야 합니다.
echo '2 * 3 > 5 is a valid inequality'
이렇게 하면 '...'
쉘이 특수 문자를 해석하고 사용자가 입력한 문자열을 표시하는 것을 방지할 수 있습니다.