"단어"의 "단어 이름" 실행 완료`

"단어"의 "단어 이름" 실행 완료`

Bash에서 이 명령의 구문은 다음 for과 같습니다.

for name [ [in [words ...] ] ; ] do commands; done
  1. 하지만 이 예제는 작동합니다.

    for f in ls *; do echo $f; done
    

    내 생각에 이것은 ls *명령이므로 로 사용할 수 없습니다 . 대신 파일 이름 확장자를 단어로 사용할 수 있는 를 사용해야 words합니다 . 그러면 위의 예가 왜 작동할까요?for f in *; do echo $f; done*

  2. ls * 으로 사용 하려면 words명령 대체를 사용해야 한다고 생각합니다.

    for f in $(ls *); do echo $f; done
    

    하지만 이 예는 이전 예와 똑같은 작업을 수행하지 않습니다. 이것은 하위 디렉토리의 내용을 나열하는 반면, 이전 디렉토리는 하위 디렉토리의 내용이 아닌 하위 디렉토리만 나열합니다. 두 예 사이에 왜 이러한 차이가 있습니까?

답변1

ls*쉘에 의해 확장된 단어입니다 .

두 번째 예에서는 셸이 먼저 확장된 *다음 ls결과를 나열하기 위해 호출됩니다.

관련 정보