출력이 다른 이유는 무엇입니까?
touch a aa bb ccc
echo *
a aa bb ccc // 이해했습니다. *는 0개 이상 일치함을 의미합니다.
*
aa bb ccc // 혼란스럽습니다.
echo ?
확인
?
aa bb ccc // 또 헷갈립니다.
*?
aa bb ccc // 매우 혼란스럽다
* *
a aa aa bb bb ccc ccc // 매우 매우 혼란스럽습니다.
echo를 사용하는 것과 사용하지 않는 것의 차이점이 무엇인지 궁금합니다.
답변1
작성하는 각 줄에는 일반적으로 첫 번째 단어인 명령이 있어야 합니다.
무언가를 인쇄하려면 일반적인 명령은 입니다 echo
.
pwd(현재 작업 디렉터리)에 a
, aa
, bb
및 ccc
.
그런 다음 이 명령은 디렉터리의 모든 파일을 인쇄합니다.
$ echo *
a aa bb ccc
그리고 이 명령은 pwd에서 한 문자가 있는 모든 파일을 인쇄합니다.
$ echo ?
a
그러나 명령을 제공하지 않으면 첫 번째 "단어"(대부분의 경우 첫 번째 공백까지)가 명령으로 간주됩니다.
별표만 제공하는 경우 *
별표 확장으로 인한 첫 번째 단어가 실행할 명령으로 사용됩니다.
명령이 a
없으면 오류가 인쇄됩니다.
$ *
bash: a: command not found
라는 명령이 있으면 a
세 개의 인수를 사용하여 호출됩니다 aa bb ccc
.
더 이상 자세한 내용을 제공하지 않으므로 해당 이름으로 어떤 명령이 실행되고 있는지 대략적으로 추측할 수 있습니다 a
(기본 명령이 아님). 또한 어떤 쉘을 사용하고 있는지 알 수 없습니다.
그러나 모든 예에서는 첫 번째 항목이 a
누락되었음을 보여줍니다.
$ *
aa bb ccc ### missing first `a`.
$ *?
aa bb ccc ### missing first `a`.
$ * *
a aa aa bb bb ccc ccc ### missing first `a`.
제외:
$ ?
a aa bb ccc
명령이 무엇인지 모르기 때문에 결론을 내리기가 어렵습니다 a
.