Bash中如何将特殊字符存入变量并用于字符串处理?
在Bash中用变量存储的特殊字符做字符串操作
当然可以实现!不过Bash的参数展开语法本身不支持直接把变量当成修饰符(比如^这种大小写转换符)来用,得绕个小弯——用eval来动态生成并执行我们需要的展开表达式就行。
我们一步步来实现你要的效果:
- 先定义好你的变量:
var1='hello world' var2=${var1:3} # 此时var2的值是 'lo world' var3='^'
- 用
eval动态构造并执行参数展开
你想要的等价于echo ${var1:0:3}${var2^},但要把^换成变量var3,可以这样写:
echo ${var1:0:3}$(eval "\${var2$var3}")
执行这段代码就能得到你想要的输出:heLlo world
为什么要这么写?
- 直接写
${var2$var3}是不行的,因为Bash的参数展开语法里,^是固定的语法修饰符,不是变量替换的部分,解释器会把它当成语法错误。 eval的作用是把我们拼接出来的字符串${var2^}当成Bash命令来执行,这里的\$是为了转义,避免在eval执行前就提前展开var2。
另一种更清晰的写法
如果你觉得上面的写法有点紧凑,也可以拆分步骤,先构造完整的展开表达式:
# 构造我们需要的参数展开字符串:"var2^" exp="var2$var3" # 用eval执行展开,再拼接输出 echo ${var1:0:3}$(eval "\${$exp}")
注意事项
使用eval的时候要格外小心:如果var3的值来自不可信的输入(比如用户输入、外部文件),可能会被注入恶意命令,导致安全问题。但如果是你自己控制的固定变量,就完全没问题。
内容的提问来源于stack exchange,提问作者Freeman
相关产品推荐
相关产品推荐

