如何在Shell脚本中将*作为字符串保留输出?
解决Shell脚本中SQL语句*被解析为文件列表的问题
你遇到的是Shell的通配符扩展特性:当未用引号包裹变量时,Shell会把变量中的*识别为通配符,替换成当前目录下的所有文件名称。解决方法有以下几种:
方法1:输出变量时添加双引号
在使用echo输出变量时,用双引号包裹变量,Shell会保留变量的原始内容,不进行通配符解析。修改后的代码如下:
#!/bin/bash sql_command="SELECT * FROM test-db.test-schema.test-table" echo "$sql_command"
方法2:用单引号定义变量(适合无变量替换的场景)
如果你的SQL语句不需要嵌入Shell变量,直接用单引号定义变量,*会被原样保存,后续输出时即使不加引号也不会被解析:
#!/bin/bash sql_command='SELECT * FROM test-db.test-schema.test-table' echo $sql_command
方法3:临时关闭通配符扩展(不推荐)
可以用set -f临时关闭Shell的通配符扩展功能,执行完相关操作后用set +f恢复。这种方法会影响整个脚本的通配符解析行为,仅适合特殊场景:
#!/bin/bash set -f # 关闭通配符扩展 sql_command="SELECT * FROM test-db.test-schema.test-table" echo $sql_command set +f # 恢复通配符扩展
内容的提问来源于stack exchange,提问作者Aman Chagti
相关产品推荐
相关产品推荐

