在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// /_}"
答案 0 :(得分:1)
--eval
选项的参数需要是单个bash单词,因此您需要避免使用bash单词扩展$value
。这意味着你需要将扩展放在双引号中:
mongo --verbose localhost:27017/myDB --eval \
'db.ips.update({"id":"id"}, { $push: { "key": {"key":"'"$value"'"}}})'
^ ^
该论点由单引号段,双引号段和最终单引号段组成。单引号段内的双引号当然是普通字符。