在Bash脚本中执行Python脚本时如何处理Bash通配符?

0 投票
1 回答
501 浏览
提问于 2025-04-16 12:38

我有一个bash脚本,它定义了一个包含*通配符的文件模式数组。

这个脚本会执行一个python脚本,并把这些文件模式作为参数传递给它。

在命令行中,我可以把整个文件模式用引号括起来,python对此很满意。

但是在bash脚本中,如果我把文件模式用引号括起来,python的os.path.realpath似乎会对这些引号感到困惑,因为引号会被传递到脚本里。

比如,bash脚本:

BACKUP_PATHS=("/root/backups/db-dump-*" "/root/backups/*_backup.tar.bz2")
for path in "${BACKUP_PATHS[@]}"
do
  /usr/local/bin/python2.7 /usr/local/bin/clean.py \'$path\' $MAX_FILES
done

python:

os.path.realpath(path)    # results in something like: /usr/local/bin'/root/backups/db-dump-*'

我该怎么让它们一起正常工作呢?

谢谢

1 个回答

2

不要用 \'$path\',而是用 "$path"。双引号可以让变量 $path 的内容被替换进来,但又能防止通配符扩展,确保这个路径作为一个整体被传递。

撰写回答