함수에서 아래 for 및 if 조건을 정의했습니다. 처음으로 잘 실행됩니다. 두 번째로 for 루프 후에 실행되지 않고 echo 문만 작성합니다. 왜 이렇게 동작하는 걸까요?
for outputFile in $outputFiles
do
echo"Output file is $outputFile"
if [ $outputFile == sampple*.pdf ]; then
FromFile=$OutputFilePath
transferFiles
fi
done
답변1
파일 글로빙 패턴에 대해 문자열을 테스트하려면 다음을 사용하십시오 case
.
case "$outputFile" in
sampple*.pdf)
FromFile="$OutputFilePath"
transferFiles ;;
esac
bash
또는 의 정규 표현식에 대해 문자열을 테스트하려면 다음을 수행하십시오 ksh93
.
if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then
FromFile="$OutputFilePath"
transferFiles
fi
여기서는 and 대신 [[ ... ]]
and를 사용한다는 점에 유의하세요 .=~
[ ... ]
==
구문은 일반적으로 문자열 비교 연산자를 [ ... ]
지원하지 않습니다 .==
[[ ... ]]
및 를 사용하면 ==
오른쪽이 파일 글로빙 패턴으로 사용됩니다. 따라서 다음은 ( bash
또는 ksh93
)에서도 작동합니다.
if [[ "$outputFile" == sampple*.pdf ]]; then
# as before
fi