
On 01/05/2015 07:45 PM, Skip Montanaro wrote:
Indeed. I only have 2.7.2 available here at work. Here's what bash tells me on a Linux box:
% ls yen{2,3}.* yen2.out yen2.png yen2.tradeyen3.out yen3.png yen3.trade % ls yen[23].* yen2.out yen2.png yen2.tradeyen3.out yen3.png yen3.trade
[...]
Here's what the glob module tells me:
% python Python 2.7.2 (default, Nov 14 2012, 05:07:35) [GCC 4.4.6 [TWW]] on linux3 Type "help", "copyright", "credits" or "license" for more information.
import glob glob.glob("yen{2,3}.*") [] glob.glob("yen[23].*") ['yen3.trade', 'yen2.out', 'yen2.trade', 'yen3.out', 'yen3.png', 'yen2.png']
I only discovered this "shortcoming" (or "Bourne Shell dependency") relatively recently. I've been using bash for so long it never even occurred to me that {...} notation wasn't available in all shells.
Note that the {...} notation is not a part of globbing, it's a different mechanism (bash calls it brace expansion IIRC). With brace expansion, the different choices are *always* expanded regardless of the existence of matching filenames. Your pattern first gets expanded to "yen2.* yen3.*" and then globbing ensues (with the standard rule that if there is nothing matching e.g. yen2.* it is either given literally to the program or the command line is rejected, depending on the shell). => I wouldn't expect the Python glob module to perform brace expansion. cheers, Georg