TextEdit 产生“egrep:括号不平衡”错误

TextEdit 产生“egrep:括号不平衡”错误

我已经为工作编写了一个小型 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>>PreferencesSmart quotes取消选中

在此输入图像描述

或者,限制Smart quotes为富文本文档仅有的, 申请:

TextEdit>>PreferencesSmart quotes and dashes in rich text documents only查看

在此输入图像描述

最后,如果你想禁用Smart quotes系统范围内禁用,请参阅:Mavericks(或 TextEdit)中的引号问题

答案2

听起来您的文本编辑器将标准 ASCII 引号更改为一些更奇特的引号。它们的问题是 shell 不考虑除 ASCII 引号之外的任何内容,因此行为会发生变化。

例如普通引号:

$ echo "foo\(bar"
foo\(bar

与奇特的报价:

$ echo “foo\(bar”
“foo(bar”

在第一种情况下,引号保护反斜杠,如果是的话egrep,反斜杠将保护左括号。在第二种情况下,shell 看不到任何引号,因此它会处理反斜杠,当命令看到它时,反斜杠就会消失,并将egrep其作为分组构造的开始。

解决方案是修复编辑器以生成 ASCII 引号,或者使用不坚持更改引号的编辑器。

相关内容