Bash에서 이 명령의 구문은 다음 for
과 같습니다.
for name [ [in [words ...] ] ; ] do commands; done
하지만 이 예제는 작동합니다.
for f in ls *; do echo $f; done
내 생각에 이것은
ls *
명령이므로 로 사용할 수 없습니다 . 대신 파일 이름 확장자를 단어로 사용할 수 있는 를 사용해야words
합니다 . 그러면 위의 예가 왜 작동할까요?for f in *; do echo $f; done
*
ls *
으로 사용 하려면words
명령 대체를 사용해야 한다고 생각합니다.for f in $(ls *); do echo $f; done
하지만 이 예는 이전 예와 똑같은 작업을 수행하지 않습니다. 이것은 하위 디렉토리의 내용을 나열하는 반면, 이전 디렉토리는 하위 디렉토리의 내용이 아닌 하위 디렉토리만 나열합니다. 두 예 사이에 왜 이러한 차이가 있습니까?
답변1
ls
*
쉘에 의해 확장된 단어입니다 .
두 번째 예에서는 셸이 먼저 확장된 *
다음 ls
결과를 나열하기 위해 호출됩니다.