`for in` 명령 파일 이름 확장 문제

`for in` 명령 파일 이름 확장 문제

나는 bash스크립트를 가지고 있습니다 :-

for i in *.x *.y *.z *.a *.b *.c
do
    echo "$i"
done

패턴과 일치하는 파일이 없는 경우 *.y이 변수 i의 값은 입니다 *.y. 이런 일이 발생하면 내 논리가 엉망이 됩니다.

이런 일이 발생하지 않게 하려면 어떻게 해야 합니까?

답변1

nullglob여기서는 그대로 두지 않고 일치하지 않는 전역 옵션을 사용하여 null로 확장하려는 경우입니다 .

shopt -s nullglob
for i in *.x *.y *.z *.a *.b *.c; do
  ...
done

여기서도 다음을 수행할 수 있습니다.

shopt -s nullglob
for i in *.[xyzabc]; do
  ...
done

한 영역만 확장하면 되므로 더욱 효율적입니다. 하지만 순서가 달라지니 참고하세요.

또는 단일 문자가 아닌 확장의 경우:

shopt -s nullglob extglob
for i in *.@(x|y|foo|bar); do
  ...
done

바라보다nullglob이 기본값이 아닌 이유는 무엇입니까?이에 대한 자세한 정보와 다른 쉘에 대한 대안.

관련 정보