You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 17:05:57