Поскольку оболочка расширяет часть A*.txt
до нескольких путей, прежде чем она будет передана вызываемой команде (в данном случае cp
).
Это означает, что в первом случае, если у вас есть файлы с именами A1.txt, A2.txt, A3.txt и A4.txt и каталоги A1, A2, A3 и A4, каждый из которых содержит output.txt, он расширяется до чего-то вроде:
for X in A1.txt A2.txt A3.txt A4.txt ; do cp $X/output.txt output/$X.txt ; done
а во втором случае он расширяется до:
cp A1/output.txt A2/output.txt A3/output.txt A4/output.txt output/A*.txt
где часть output/A*.txt
может расширяться или не расширяться в зависимости от того, существует ли в каталоге output
что-либо, совпадающее с глобом. Если это так, становится еще хуже, например:
cp A1/output.txt A2/output.txt A3/output.txt A4/output.txt output/A8.txt output/A9.txt
Поскольку cp
при задании нескольких исходных файлов хочет каталог назначения в конце, он не знает, как с этим справиться, и просто подбрасывает руки и вместо этого выдает ошибку.