You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash/Shell脚本中传递含特殊字符的动态变量参数

解决Jenkins流水线传递含特殊字符密码的问题

问题原因

直接使用sh "./script-test.sh $dbpassword"时,shell会解析变量中的特殊字符:

  • #会被当作注释起始符,导致其后的所有内容被忽略
  • !会触发shell的历史命令扩展
    最终脚本实际收到的参数为空。

解决方案

1. Jenkins流水线中正确传递参数

在Jenkins的sh步骤中,通过包裹变量避免shell解析特殊字符,两种可行写法:

# 写法1:用单引号包裹密码变量
sh './script-test.sh '"'$dbpassword'"'
# 写法2:用双引号转义包裹
sh "./script-test.sh \"$dbpassword\""

核心是让shell把完整的密码字符串作为单个参数传递,不会拆解或忽略特殊字符。

2. 脚本内正确接收并使用参数

在script-test.sh中,用$1接收密码参数,调用sqlplus时用双引号包裹密码,避免sqlplus解析特殊字符:

#!/bin/bash
DB_PASSWORD="$1"
# 调用sqlplus的正确格式
sqlplus username/"$DB_PASSWORD"@your_database

验证

执行流水线后,脚本会完整接收#!2323qwq作为参数,sqlplus可正确识别该密码完成登录。

内容的提问来源于stack exchange,提问作者gaurav sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:32:06