![폴더의 파일을 반복할 때 이상한 동작](https://linux55.com/image/157028/%ED%8F%B4%EB%8D%94%EC%9D%98%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%A0%20%EB%95%8C%20%EC%9D%B4%EC%83%81%ED%95%9C%20%EB%8F%99%EC%9E%91.png)
여기서 무슨 일이 일어나고 있는지 모릅니다. 저는 Mac에서 Bash 3.2를 사용하고 있습니다. 나는 가지고있다:
ores_resource(){
for f in "$(cd "$HOME/.oresoftware/bash" && find . -type f)"; do
f="${f:2}"
echo "my file $f"
done;
}
나는 다음과 같은 응답을 받았습니다.
my file r2g.sh
./fame.completion.sh
./read_json.sh
./nlu.sh
./lmx.sh
./public-bash-utils.sh
./run-tsc-if.sh
./r2g.completion.sh
./fame.sh
./waldo.sh
./nlu.completion.sh
그렇다면 여기서 정확히 무슨 일이 일어나고 있는 걸까요? 각 줄 앞에 있는 "내 파일"이 로그아웃될 것이라고 생각했습니까?
답변1
옵션을 사용하는 find
솔루션 은 다음과 같습니다 -exec
.
ores_resource() {
cd $HOME/.oresoftware/bash
find . -type f -exec bash -c 'echo "my file ${1:2}"' bash {} \;
}
find
발견된 각 파일 이름에 대해 다음 명령 문자열을 사용하여 새로운 bash 프로세스가 시작됩니다 -c
. 각 파일 이름은 {}
bash 프로세스에 매개변수로 전달됩니다 $1
(variables 와 마찬가지로 $f
).