echo는 파일 목록이나 일반 텍스트를 출력해야 하는 시기를 어떻게 식별합니까?

echo는 파일 목록이나 일반 텍스트를 출력해야 하는 시기를 어떻게 식별합니까?

테스트에서 이런 문제가 있었습니다. 모음(a, e, i, o, u, e)으로 시작하고 숫자로 끝나며 최소 3개의 문자가 있는 모든 디렉토리를 echo 출력하도록 합니다. 쉬울 줄 알았는데 금방 혼란스러워져서 결국 실패했어요. 나의 첫 번째 생각은 간단했습니다.

echo {a,e,i,o,u,e}*{0..9}

그런 다음 대괄호를 사용해 보았습니다.

echo [a,e,i,o,u,e]*[0..9]

마지막으로 나는 다음과 같은 것을 시도했습니다.

echo $(ls {a,e,i,o,u,e}*{0..9})

이렇게 하면 원하는 결과가 나오지만 일부 오류 디렉터리에 메시지가 누락되어 있고 이 작업을 수행하기 위해 다른 기능을 사용하고 있기 때문에 부정행위로 간주되지 않을지 확실하지 않습니다.

누구라도 이를 명확히 하는 데 도움을 줄 수 있습니까? 이 작업을 어떻게 수행해야 하며 언제 어떤 괄호를 사용해야 합니까? 또한 echo가 정확한 단어 대신 디렉토리 목록을 출력해야 하는 경우를 어떻게 인식하는지 알고 싶습니다.

답변1

연장하다Mosvi의 리뷰그리고Emma Luo의 설명, 내가 제안 할게:

echo [aeiou]?*[0-9]/

이는 요구 사항을 충족하기 위해 파일 이름 확장자(전역) 기능을 사용합니다.

  • 디렉토리 또는 디렉토리에 대한 기호 링크(후행 슬래시 /)
  • 영어 소문자 모음( [aeiou]) 으로 시작
  • 하나 이상의 추가 문자가 포함되어 있습니다( ?).
  • 그리고 가지고적어도세 문자( *0개 이상의 문자와 일치하며 아래와 같이 이미 일치한 두 문자와 일치한 마지막 문자에 추가됨)
  • 소수점 이하 자릿수( [0-9]) 로 끝납니다.

쉘은 일치하는 모든 디렉토리 이름을 확장하여 에 전달합니다 echo. 그러면 다시 에코됩니다.

bash그러나 다음을 포함한 일부 쉘의 경우아니요디렉터리가 요구 사항을 충족하면 셸은 패턴을 유지하고 이를 패턴에 직접 전달합니다. echo그러면 패턴이 다시 에코되어 다음과 같은 출력이 생성됩니다.

[에이오우]? *[0-9]/

bash에서 "nullglob" 옵션을 설정하여 이를 약간 조정할 수 있습니다. 이 옵션은 bash에 일치하는(null) 항목이 없을 때(glob),제거하다모드에서는 아무것도 전달되지 echo않고 빈 줄만 인쇄됩니다. 또는 failglob실패한 glob의 옵션을 사용하여 오류를 트리거합니다.

관련 정보