mongodb - Bash在变量中添加单引号
问题描述
因此,我在使用用于在 MongoDB 中自动创建分片副本集的脚本时遇到了问题。
脚本如下:
#!/bin/bash
set -x
export shard_ips='[10.0.0.206,10.0.0.142,10.0.0.234]'
export shard_count=3
export replication_set_number=1
shard_count=$((shard_count-1))
IFS="," read -a shard_ips_arr <<< $(echo $shard_ips | tr -d '[]')
primary_shard_ip=${shard_ips_arr[0]}
count=0
while [ $count -le ${shard_count} ]
do
shard_ips_arr[$count]=$(echo { _id: $count, host: \"${shard_ips_arr[$count]}:27017\" } )
count=$(($count + 1))
done
function join { local IFS="$1"; shift; echo "$*"; }
shard_ips_arr=$(join , "${shard_ips_arr[@]}")
echo "${shard_ips_arr}"
echo "mongo --eval 'rs.initiate( { _id: \"shardreplset${replication_set_number}\", members: [ ${shard_ips_arr} ] } )' ${primary_shard_ip}:27017"
mongo --eval 'rs.initiate( { _id: "'shardreplset${replication_set_number}'", members: [ '${shard_ips_arr}' ] } )' ${primary_shard_ip}:27017
上述脚本的目的是接收从 terraform 传递过来的字符串数组,并将其转换为 MongoDB 可以理解的内容。一个完整的命令应该如下所示:
mongo --eval 'rs.initiate( { _id: "shardreplset1", members: [ { _id: 0, host: "10.0.0.206:27017" },{ _id: 1, host: "10.0.0.142:27017" },{ _id: 2, host: "10.0.0.234:27017" } ] } )' 10.0.0.206:27017
这将使用主分片 (10.0.0.206:27017) 创建三个 MongoDB 服务器的副本集。
问题是包含 bash 似乎添加到变量中的单引号。我从脚本的最后一行收到的调试输出(使用 set -x)如下:
+ mongo --eval 'rs.initiate( { _id: "shardreplset1", members: [ {' _id: 0, host: '"10.0.0.206:27017"' '},{' _id: 1, host: '"10.0.0.142:27017"' '},{' _id: 2, host: '"10.0.0.234:27017"' '} ] } )' 10.0.0.206:27017
在 $shard_ips_arr 的每个项目中看到所有这些额外的单引号吗?例子:
{' _id: 0, host: '"10.0.0.206:27017"' '}
应该看起来像{ _id: 0, host: "10.0.0.206:27017" }
有谁知道如何解决这个问题?
如果您认为单引号实际上不是问题,也请告诉我。
如果您需要其他任何澄清,也请告诉我。
解决方案
推荐阅读
- python - 带有 Authlib 0.11 的 JWT 令牌生成器
- git - Missing the + parameter in git push after git rebase
- python - 在 infytq 应用程序中解决问题时出现问题
- javascript - Animate being triggered multiple times
- haskell - 可视类型应用程序的准引用器具体语法
- python - Keyerror problem when merging a single column from a dataframe
- git - 如何使用本地计算机上安装的任何文本编辑器在 Git 中打开 .gitignore 文件?
- c# - Failed to register Instance in AutoFac?
- algorithm - 识别给定单词时使用哪些机器学习算法
- cytoscape.js - 如何在不使用 cytoscape.js 重绘图形的情况下删除特定边?