find 명령을 명령줄에서 수동으로 실행하는 것과 스크립트에서 실행하는 것 사이에서 결과가 다르다는 것을 발견했습니다.
명령줄에서 다음 명령을 실행하면:
find . -name '*.txt' ! -name '*20120427.txt'
나는 피하고 싶은 날짜가 있는 파일을 제외하고 디렉터리에 있는 모든 .txt 파일을 얻습니다.
그러나 스크립트에서 동일한 줄을 사용하고 날짜를 식별하기 위해 변수를 사용하는 경우:
FDATE=`date +%Y%m%d`
find . -name '*.txt' ! -name '*${FDATE}.txt'
이 스크립트는 피하고 싶은 날짜가 포함된 파일을 포함하여 모든 .txt 파일을 찾습니다.
둘 사이의 유일한 차이점은 스크립트에 FDAT 변수를 전달한다는 것입니다. 나는 분명한 것을 놓치고 있습니까? 왜 결과가 다른지 이해가 안 되네요.
답변1
작은따옴표를 '*${FDATE}.txt'
큰따옴표로 변경합니다."*${FDATE}.txt"
Unix 쉘은 작은따옴표로 묶인 문자열 리터럴 내에서는 변수 대체를 수행하지 않지만 큰따옴표로 묶인 문자열 리터럴 내에서는 변수 대체를 수행합니다.