单引号包裹时变量未替换:如何在Shell脚本中填充$FIRST_NAME到X?
解决Shell脚本中变量在单引号字符串里不替换的问题
嘿,这个问题我太熟悉啦!你遇到的核心问题是Shell里单引号和双引号的引用规则:Shell会把单引号包裹的内容完全当作字面量,里面的任何变量、特殊字符都不会被解析,所以$FIRST_NAME自然不会被替换成它的值。
给你两种简单好用的解决方法:
方法一:用双引号包裹整个字符串,转义内部双引号
把定义X的单引号改成双引号,同时把字符串里的双引号用反斜杠转义,这样Shell会解析变量,同时保留JSON里的双引号:
#!/bin/sh FIRST_NAME='test' X="{\"firstname\": \"$FIRST_NAME\"}" echo $X
运行后会输出:{"firstname": "test"}
方法二:单引号+双引号拼接字符串
如果不想转义双引号,可以把字符串拆成几部分,用单引号包裹不需要解析的固定内容,用双引号包裹需要解析变量的部分,然后直接拼接:
#!/bin/sh FIRST_NAME='test' X='{"firstname": "'"$FIRST_NAME"'"}' echo $X
这里的逻辑是:
'{"firstname": "':单引号包裹的固定字符串开头"$FIRST_NAME":双引号包裹的变量,会被替换成实际值'"}':单引号包裹的固定字符串结尾
三者拼接后就得到了正确的JSON字符串,输出结果和方法一完全一致。
如果你的FIRST_NAME变量里包含空格、引号这类特殊字符,可能需要用printf做更严谨的格式化,但如果是普通的简单字符串,上面两种方法完全够用啦~
内容的提问来源于stack exchange,提问作者RaviKiran
相关产品推荐
相关产品推荐

