Bash和MongoDB:Eval中的空格不起作用

时间:2015-01-21 14:19:31

标签: javascript bash mongodb

在bash脚本中,这不能与Unexpected token ILLEGAL

一起使用
#!/bin/bash
value="White Spaced String"
mongo --verbose localhost:27017/myDB --eval 'db.ips.update({"id":"id"}, { $push: { "key": {"key":"'$value'"}}})'

这在哪里工作:

#!/bin/bash
value="NonWhiteSpacedString"
mongo --verbose localhost:27017/myDB --eval 'db.ips.update({"id":"id"}, { $push: { "key": {"key":"'$value'"}}})'

任何想法都可以解决这个问题?我试过了:

value="${value// /\\ }"将用\ escape符号和空格替换空格。然而,没有成功。

这确实有效,但我想在Mongo中保留我的JSON中的空格:

value="${value// /_}"

1 个答案:

答案 0 :(得分:1)

--eval选项的参数需要是单个bash单词,因此您需要避免使用bash单词扩展$value。这意味着你需要将扩展​​放在双引号中:

mongo --verbose localhost:27017/myDB --eval \
  'db.ips.update({"id":"id"}, { $push: { "key": {"key":"'"$value"'"}}})'
                                                         ^      ^

该论点由单引号段,双引号段和最终单引号段组成。单引号段内的双引号当然是普通字符。