请教1个shell 问题

【 TiDB 使用环境】自己电脑虚拟机环境
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
【资源配置】
各位老师,在自己电脑上的虚拟机环境里面练习shell脚本发现1个问题,在1个log里面去1个带引号的字符串,虽然可以取出来但是发现在执行过程中,引号字符似乎被转义了,不知道是为什么,因为后续要拿这个字符串作为password去连接数据库,导致报错所以有这个疑问
效果如下

2.请教以下有什么办法可以取这个字符串的时候,直接把这对单引号给取了,只要引号里面的内容

以上2点,还请老师们指教以下,谢谢

直接用${tempstr}这个变量执行就好了,bash -x是为了给你展示,才做的转义。

你的问题,其实最主要是在输出test.log不对,你如果不能保证密码里的内容,最好别用单引号括起来。用\xa0\u3000这种不可见字符吧。

1 个赞

有什么办法,可以让取字符的时候把引号去了吗,比如’81gC2d34m^S-M+v7p’ 变成81gC2d34m^S-M+v7p

我后续使用这个密码去连接数据库的时候,密码就变成了’‘'‘81g’'‘C2d*34m^S-M+v7p’'’’ 这个了,等于直接把密码改变了

对于问题2,我找到了方法
假设tempstr= ’81gC2d34m^S-M+v7p’
tempstr=${tempstr#'}
tempstr=${tempstr%'
}
echo $tempstr
最后可以将单引号去掉
这样就行
不知道老师们是不是还有其它方法

tempstr=grep -i 'str' test.log|awk -F "'" '{print $2"'\''"$3}'
这样

grep -i str test1.log | awk ‘{print $NF}’|awk -F ‘.’ ‘{print $1}’|sed “s/^‘//;s/’$//”

1 个赞

你这样是假定密码里不包含',但是看你实例的密码已经包含标点符号,如果一旦密码里有单引号,你这种假设就会出错。

否则生成密码后加一个 ... | tr -d "'"把单引号删掉就可以了

str=$(echo “$str” | sed ‘s/’'‘//g’)