値がセミコロンで区切られている CSV があります。そのCSVのデータをMongoDBデータベースの既存のコレクションに取得する必要がありますが、これはこの問題の場合には実際には関係ありません。
簡単にするために、その CSV からサンプル行を 1 つだけ使用します。
echo '1243;firstName' | sed "s:\([0-9]*\)\;\(.*\):mongo localhost/test --eval \\\\'db.test.update({_id\: \1}, {name\: \"\2\"})\\\\':" | xargs -I {} sh -c "{}"
MongoDB shell version: 2.2.0
connecting to: localhost/test
Thu Apr 4 22:50:10 ReferenceError: firstName is not defined (shell eval):1
問題は、クエリが MongoDB インタープリターに到達したときに、エスケープされていないことです。
各引用符の前に別のバックラッシュを最大 3 つ追加しようとしましたが、何も変わりませんでした。クエリが MongoDB インタープリターに到達するまで引用符がそこにとどまるように、引用符を適切にエスケープするにはどうすればよいですか?