Bash 字符串连接,不扩展通配符

Bash 字符串连接,不扩展通配符

背景:

我有一个脚本,它以文件名作为参数,例如“mydb.sql”。我的脚本导入此数据库并“清理”它(删除用户可识别数据等),将其导出,然后创建一个“精简”版本(删除所有非必要数据,仅保留主要管理员用户,删除所有投票等)。这些生成到 mydb.clean.sql 和 mydb.lite.sql。此脚本在多个文件夹上运行。

我想创建一个通配符模式来传递到find。最初我只是硬编码'*.sql',返回原始、干净和精简(然后将它们传递进去du以给我一个文件大小摘要)。

现在我修改了脚本,让它接受一个参数:文件名。这样我就可以在单个文件上运行它了。

问题

那么我如何获得模式?我有这个:

FNAME=$(basename "$1");
FNAME="${FNAME%.*}*.sql"
echo $FNAME

FNAME将从转换/home/user/backups/sitea/mydb.sqlmydb。然后我想要FNAME成为字符串'mydb*.sql',但是 bash 正在扩展那个 * ,所以我最终得到了FNAME'mydb.sql mydb.clean.sql mydb.lite.sql'假设它在 CWD 中找到它们)。

我尝试使用反斜杠*,但最终发现'mydb\*.sql'不起作用。我尝试使用单引号,但 bash 不会扩展该${FNAME%.*}部分。

有什么想法吗?

更新

这更好地说明了这个问题......

[user@server temp]$ T="${FNAME}\*.sql"; echo $T
mydb\*.sql

[user@server temp]$ T="${FNAME}*.sql"; echo $T
mydb.clean.sql mydb.lite.sql mydb.sql

[user@server temp]$ T='${FNAME}*.sql'; echo $T
${FNAME}*.sql

答案1

它正在进行最后一步扩展。

echo "$FNAME"

相关内容