다음 스크립트의 경우:
for f in $FILES
do
fname="$(basename "${f}")"
fn="${fname:6:2}"
if [["$fn" == "01"]]; then #error here
echo "yes"
fi
done
답변1
상당히 간단한 구문 문제가 있습니다. 아래와 같이 테스트 구조 앞뒤에 공백을 추가하면 됩니다.
if [[ "$fn" == "01" ]]; then ...
작동해야합니다.
그 이유는 [[
실제로는 다음과 같습니다.bash
핵심 단어는 연산자가 아니므로 "독립적으로" 배치되어야 합니다(etc.와 유사 if
).
파일 중 하나의 이름은 입니다 01
. 구문을 사용하면 쉘은 키워드를 확인 if
하고 그 뒤에 반환 코드가 계산될 명령이 올 것으로 예상합니다. 귀하의 코드에서는 [[01
명령으로 간주되지만 명령이 존재하지 않는 것 같습니다. 이는 오류 메시지의 원인이기도 합니다.
쉘 스크립트에 대해 더 자세히 알고 싶고 bash
(또는 ksh
)(연산자를 테스트하기 위해 이중 괄호를 사용하여 표시됨)을 사용하고 있는 것으로 보이면 다음을 확인해 보세요.강타 가이드(@terdon의 제안을 기반으로 함) 그리고 나중에고급 Bash 스크립팅 가이드(때때로 포함되어 있는 그다지 좋지 않은 관행으로 인해 "단련"된 경우) 자세한 정보를 확인하세요.