在Bash脚本中使用SQLite:如何正确处理Bash变量?
修复方案
问题出在你使用了带单引号的HERE文档分界符 <<'END_SQL' —— 这种写法会让Bash完全不解析文档内部的变量,所以$FILE被当作了字面文件名,导致输出到了名为$FILE的文件中。
只需要去掉分界符END_SQL两侧的单引号,让Bash能够展开文档内的变量即可:
#!/bin/sh FILE=$2 sqlite3 $1 <<END_SQL .headers on .mode csv .output $FILE select * from results; .output stdout END_SQL
如果你的文件名包含空格、引号或其他特殊字符,建议给$FILE加上双引号,避免解析错误:
#!/bin/sh FILE=$2 sqlite3 $1 <<END_SQL .headers on .mode csv .output "$FILE" select * from results; .output stdout END_SQL
内容的提问来源于stack exchange,提问作者k88074
相关产品推荐
相关产品推荐

