On 09-10-04 06:17:20, Sharpe, Sam J wrote:
2009/10/4 psmith psmith@fedoraproject.org:
hi list, whilst trying to run this bash command
for w in {A..Z}{A..Z}{A..Z}{A..Z}{A..Z}{A..Z}{A..Z}{A..Z} ;do echo
$w;done >
wl1
Consider that for a second...
You are trying to generate a list of all possible combinations of an 8 character word composed of only uppercase letters - that's 26^8 combinations (208 Billion). Each word is 8 bytes long, which I make to be 1670616516608 bytes... or to put it another way, 1.5 TB
So, you've got 4 GB of virtual memory and you are trying to fit an 1555GB array into it. Simple mathematics says no. Dumping the arguments before it dies is pointless, because it hasn't even got as far as expanding arguments yet.
You need to think of another was to do this and I humbly suggest that Bash should not be high on your list.
Bash should be OK if Pathname Expansion is used instead of the more general Brace Expansion:
$ for w in [[:upper:]][[:upper:]][[:upper:]][[:upper:]][[:upper:]] [[:upper:]][[:upper:]][[:upper:]] ; do echo $w ; done
However, if there are no matches, the match string will be tried unless the shell options failglob is unset and nullglob is set:
$ ( shopt -s nullglob ; shopt -u failglob ; for w in [[:upper:]] [[:upper:]][[:upper:]][[:upper:]][[:upper:]][[:upper:]][[:upper:]] [[:upper:]] ; do echo $w ; done )
(Sorry for the wrapping.)