Bash 正在使用远程数据扩展 glob 模式

Bash glob pattern being expanded using remote data

我做错了:

s3cmd del s3://mybucket/*

但是……它正在工作:

...
delete: 's3://mybucket/file0080.bin'
delete: 's3://mybucket/file0081.bin'
delete: 's3://mybucket/file0082.bin'
...

我很困惑。通常 * 由 shell (Bash) 扩展,使用 localhost.

中可用的信息

How/why 扩展是否针对 s3 存储桶?

(这是一个不带引号的 glob 模式)

如果 glob 不匹配任何内容,它将保持原样(除非您在 Bash 中设置 nullglob 选项),在这种情况下带有星号,并且 s3cmd del 显然明白这一点。

当然,依赖这种行为并不是一个好主意,因为如果本地文件突然存在并且与 glob 相匹配,它(可能)会停止工作。引用 glob(即 而不是 glob)是一个好习惯。

另一种选择是设置 nullglob 选项 (shopt -s nullglob) 使不匹配的 glob 完全消失。

要查看 glob 如何扩展以及最终命令的样子,您可以在 运行 之前在 Bash 中 运行 set -x,这使得 Bash 在 运行 之前打印每个(扩展的)命令(set +x 将其关闭)。