无需if/else,在Shell脚本中适配Redis连接参数兼容测试与生产
解决redli连接Redis时TLS参数重复的问题
问题根源
你遇到的flag 'tls' cannot be repeated错误,是因为用字符串拼接参数时,--tls flag被意外重复添加到命令行中(比如测试/生产环境的参数片段里都包含了--tls)。
无if/else的解决方案
shell中处理动态命令参数,用数组替代字符串拼接是最可靠的方式,既能避免参数重复,也能兼容带空格的路径。以下是实现逻辑:
- 初始化基础参数数组,固定添加
--tls(仅添加一次):
REDLI_ARGS=(--tls)
- 用shell短路求值替代if/else,根据环境追加对应参数:
[[ "$TRAVIS" == "true" ]] && REDLI_ARGS+=(--insecure) || REDLI_ARGS+=(--cacert /path/to/prod-cert.pem)
- 执行redli命令时展开数组:
redli "${REDLI_ARGS[@]}" [你的其他固定参数,比如-h redis-host -p 6379]
极简一行写法
如果偏好更紧凑的代码,也可以直接在数组初始化时完成条件判断:
REDLI_ARGS=( --tls $( [[ "$TRAVIS" == "true" ]] && echo "--insecure" || echo "--cacert /path/to/prod-cert.pem" ) ) redli "${REDLI_ARGS[@]}" [其他参数]
数组方案的优势
- 数组会保留每个参数的边界,避免因空格或特殊字符导致参数拆分错误;
--tls仅在数组初始化时添加一次,后续仅追加环境对应的参数,从根本上杜绝重复flag的问题。
内容的提问来源于stack exchange,提问作者Mohan1234
相关产品推荐
相关产品推荐

