왜 같은 일을 하는 것으로 echo해석되나요 ?*ls

왜 같은 일을 하는 것으로 echo해석되나요 ?*ls

다음 shell명령을 고려하십시오.

$ls
my_app  newlist  note

그리고

$echo *
my_app  newlist  note

그리고

$printf *
my_app

첫 번째 명령 ls은 파일에 대한 정보를 나열합니다(기본값은 현재 디렉터리). 두 번째 명령 echo은 인수로 전달된 문자열을 출력하는 명령입니다. 그러나 입력하면 echo *출력은 ls.

printf *출력으로 첫 번째 파일 이름만 제공합니다 .

echo왜 이런 식으로 설명 됩니까 *? 왜 printf, 그리고 더 이상하게도 첫 번째 것만 출력됩니까?

답변1

왜 같은 일을 하는 것으로 echo해석되나요 ?*ls

대답은 간단합니다. 그렇지 않습니다. echo당신이 말했듯이, 그것은 인수를 반복하고 그 사이에 공백을 두고 출력합니다.

그렇다면 왜 이런 동작이 나타나는 걸까요 ls?

이는 쉘이 *모든 파일과 일치하는 인수 목록을 대체하기 때문입니다(a로 시작하지 않음 .(dotglob이 켜져 있지 않은 경우)). 그럼 echo그냥 그 일을 하세요. 이 전역 교체는 다음에 발생합니다.모두명령이 아니라 쉘에 의해 수행되기 때문입니다.

그래서 뭐 printf?

printf인쇄 형식입니다. 첫 번째 매개변수는 형식입니다. 그렇게 하면 printf "%s " *그게 다입니다 echo.

첫 번째 파일이 이면 다음을 hello%sworld얻게 됩니다.hellofile2world hellofile3world

더 알아보기

이 시도. 무슨 일이 일어나고 있는지 이해하는 데 도움이 될 것입니다. (실제 목적으로 이 코드를 사용하도록 제안하는 것은 아닙니다. 학습용으로만 사용하십시오.)

이것을 시도해 보세요 cat /proc/self/cmdline * | less. 명령줄이 처음에 어떻게 보이는지 보여줍니다(셸이 작업을 마친 후).

답변2

표시할 입력이 없고 대신 *(all) 파일 목록을 인수로 사용하여 문자열로 표시하기 때문입니다.

너무 쉬워요

그리고 *는 매개변수입니다. "*" 내용을 에코하므로 파일 목록은

관련 정보