나는 작업을 위해 작은 bash 스크립트를 작성했습니다. 메타데이터를 기반으로 파일을 자동으로 업데이트하려고 합니다.
전반적으로 스크립트는 잘 작동하지만 새 버전을 저장할 때마다 오류가 발생합니다.
egrep: 불균형 브래킷
HOSTEDDATE=
정확히 동일한 구문을 사용하여 시작줄을 다시 작성하면 다시 작동합니다. 나는 이것이 모양이 바뀌는 것처럼 보이는 따옴표와 관련이 있다고 의심합니다(처음 입력할 때는 완전히 수직이고 새 버전으로 다시 저장한 후에는 각도가 있음).
TextEdit에서 일반 텍스트를 사용하고 있는데 이것이 알려진 문제입니까? 같은 줄을 반복해서 다시 작성할 필요가 없는 해결 방법이 있습니까?
코드의 관련 부분은 다음과 같습니다.
for PIURL in ${ARRAY[*]}
do
HOSTEDDATE=`cURL -s ${PIURL} | strings | egrep -o "CreationDate\(D:[0-9]{6}" | egrep -o "[0-9]{6}"`
FILE=${PIURL##*/}
NAME=${FILE%.*}
#find local file and pull date
LOCALDATE=`ls $NAME* | egrep -o "[0-9]{6}"`
if [[ ${HOSTEDDATE} > ${LOCALDATE} ]]; then
#move old file to "ARCHIVED"
mv $NAME* ARCHIVED/
#download PI file with required name
cURL -L -o ${NAME}_${HOSTEDDATE}.pdf $PIURL
#send e-mail with
mail -s "${NAME} has a new PI" [email protected] <<< "${NAME}_${DATE} has been uploaded to Pulse"
fi
done
답변1
Smart quotes
이는 MacOS에서 이 기능의 부작용입니다. 비활성화하려면 다음을 적용하십시오.
TextEdit
>>Preferences
Smart quotes
선택 취소)
또는 Smart quotes
서식 있는 텍스트 문서로 제한하세요.오직, 적용하다:
TextEdit
>>Preferences
Smart quotes and dashes in rich text documents only
확인하다)
Smart quotes
마지막으로, 시스템 전체 비활성화를 비활성화하려면 다음을 참조하세요.Mavericks(또는 TextEdit)의 인용 문제
답변2
텍스트 편집기에서 표준 ASCII 인용문을 좀 더 멋진 인용문으로 변경한 것 같습니다. 문제는 쉘이 ASCII 따옴표 외에는 아무것도 고려하지 않기 때문에 동작이 변경된다는 것입니다.
예를 들어 일반 따옴표는 다음과 같습니다.
$ echo "foo\(bar"
foo\(bar
멋진 인용문과 함께 :
$ echo “foo\(bar”
“foo(bar”
첫 번째 경우에는 따옴표가 백슬래시를 보호하고, 그렇다면 egrep
백슬래시가 여는 괄호를 보호합니다. 두 번째 경우에는 셸에 따옴표가 표시되지 않으므로 백슬래시를 처리하고 명령에서 이를 확인하면 백슬래시가 사라지고 egrep
이를 그룹화 구성의 시작으로 사용합니다.
해결책은 ASCII 인용문을 생성하도록 편집기를 수정하거나 인용문 변경을 요구하지 않는 편집기를 사용하는 것입니다.