私は仕事のために小さな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
スラッシュが開く括弧を保護します。 2番目のケースでは、シェルに引用符が表示されないため、バックスラッシュを処理してコマンドでそれを確認すると、バックスラッシュが消えてegrep
グループ化構成の開始として使用されます。
解決策は、ASCII引用符を生成するようにエディタを変更するか、引用符の変更を必要としないエディタを使用することです。