내 정규 표현식이 bash "if"에서 작동하지 않는 이유는 무엇입니까? [복사]

내 정규 표현식이 bash "if"에서 작동하지 않는 이유는 무엇입니까? [복사]

이것은 내 코드입니다.

if [ -f /Applications/xml[0-9].pl ]

또한 이중 괄호를 사용해 보았지만 -f =~둘 다 작동하지 않는 것 같습니다.

처음에는 정규식에 문제가 있을 수 있다고 생각했지만 이것을 시도해 보았습니다.

echo h1 | sed 's/h[0-9]/h/'

이것은 효과가 있었습니다. 내가 여기서 뭘 잘못하고 있는 걸까?

답변1

파일을 테스트하는 데 이와 같은 정규식이나 glob을 사용할 수 없습니다. 파일을 반복해야 합니다.

for file in /Applications/xml[0-9].pl; do if [ -f "$file" ]; then ...

답변2

bash는 조건을 평가하기 전에 정규식을 확장합니다. 디렉터리에 다음과 같은 세 개의 파일이 포함되어 있는 경우

/Applications/xml0.pl
/Applications/xml1.pl
/Applications/xml2.pl

귀하의 if진술은 다음과 같습니다

if [ -f /Applications/xml0.pl /Applications/xml1.pl /Applications/xml2.pl ]]

이는 문법적으로 올바르지 않습니다. 다음 명령을 사용하여 파일이 존재하는지 확인하려면 파일 이름을 완전히 지정해야 합니다.

for file in /Applications/xml[0-9].pl
do
    if [ -f ${file} ]

또는 가능하다면 해당 find명령을 사용하여 파일에 대해 원하는 작업을 수행하십시오.

관련 정보