如何在Bash中初始化含引号与反斜杠的字符串变量?
解决Bash变量/数组保留特殊字符的问题
方法1:单引号包裹(推荐)
Bash中单引号会完全保留内部所有字符的原始形态,不会解析转义符、变量或特殊符号,直接用它包裹目标字符串即可:
# 单个变量赋值 PARAM='-options \'{"version": "http"}\'' # 数组赋值 PARAMS=('-options \'{"version": "http"}\'')
验证输出:
echo "$PARAM" # 输出:-options \'{"version": "http"}\' echo "${PARAMS[0]}" # 输出:-options \'{"version": "http"}\'
方法2:双引号配合双重转义
如果必须使用双引号,需要对反斜杠做双重转义(双引号内反斜杠会被Bash解析),同时引号也需转义:
PARAM="-options \\'{"version": "http"}\\'" PARAMS=("-options \\'{"version": "http"}\\'"
执行后同样能得到期望的输出结果。
原方法失效原因
你之前的写法PARAMS=(-options \'{"version": "http"}\')中,\'会被Bash解析为单个',反斜杠被当作转义符消耗掉,所以最终字符串里的反斜杠丢失。而单引号包裹时,内部所有字符都会被原样保留。
内容的提问来源于stack exchange,提问作者Ira
相关产品推荐
相关产品推荐

