Shell脚本中字符串内变量未被值替换的问题求助
解决Shell脚本中变量未被值替换的问题
这问题我之前踩过坑!核心原因是单引号会让Shell完全跳过内部的变量解析——你写的'Queue for uuid $uuid'里,$uuid被当成了普通字符串,而不是你输入的UUID值。
解决方案:把单引号换成双引号
Shell里双引号会正常解析内部的变量,同时保留字符串里的空格等格式。修改你的zgrep命令就行:
# 用双引号包裹搜索字符串,同时推荐用$()替代反引号(可读性更强,嵌套也方便) a=$(zgrep "Queue for uuid $uuid" reader_$date.gz)
修改后的完整脚本
#!/bin/bash read -p "Enter uuid " uuid read -p "Enter date in format yyyymmdd: " date echo $uuid echo $date a=$(zgrep "Queue for uuid $uuid" reader_$date.gz) b=$(zgrep 'Queue for uuid 23fef66b-fcf0-4a71-8ca3-a0761dffc473' reader_$date.gz) echo $a echo $b
为什么这样有效?
- 单引号
':内部所有内容都是纯文本,变量、转义符都不会被解析,适合固定不变的字符串。 - 双引号
":内部的变量会被替换成对应的值,同时保留空格、特殊字符的原意,适合包含变量的字符串。
现在再执行脚本,$uuid就会被正确替换成你输入的UUID,a变量的输出就会和b一样正常显示匹配的日志内容啦。
内容的提问来源于stack exchange,提问作者gourav kumar
相关产品推荐
相关产品推荐

