执行Bash脚本时输出异常:$SPLUNK_DB变量未按预期保留
嘿,这个问题其实是Bash的变量解析规则在搞鬼!
问题根源
你用双引号包裹了输出内容,Bash会自动把$SPLUNK_DB当成变量去解析——如果这个变量没设置值,就会被替换成空字符串,所以输出里就看不到$SPLUNK_DB这部分了。
两种解决办法
1. 用单引号替代双引号
单引号里的内容会被Bash当作纯文本,不会解析任何变量,直接输出原内容:
#!/bin/bash for i in `cat index_name` do echo ' ['$i'] coldPath = $SPLUNK_DB/'$i'/colddb homePath = $SPLUNK_DB/'$i'/db thawedPath = $SPLUNK_DB/'$i'/thaweddb ' >> idx_list echo " " done
2. 转义$符号
如果想保留双引号(比如需要解析$i变量),只需要在$SPLUNK_DB的$前面加反斜杠\,让Bash把$当作普通字符处理:
#!/bin/bash for i in `cat index_name` do echo " [$i] coldPath = \$SPLUNK_DB/$i/colddb homePath = \$SPLUNK_DB/$i/db thawedPath = \$SPLUNK_DB/$i/thaweddb " >> idx_list echo " " done
执行效果
修改后再运行脚本,输出就会和你预期的一样:
[web] coldPath = $SPLUNK_DB/web/colddb homePath = $SPLUNK_DB/web/db thawedPath = $SPLUNK_DB/web/thaweddb
内容的提问来源于stack exchange,提问作者Emmanuel
相关产品推荐
相关产品推荐

