Usando uma matriz binary
como a função indicadora de cada subconjunto:
#!/bin/bash
# Prepare the indicator, set to all zeros.
binary=()
for (( i=0; i<=$#; i++ )) ; do
binary[i]=0
done
while (( ! binary[$#] )) ; do
# Print the subset.
printf '{ '
for (( j=0; j<$#; j++ )) ; do
(( i=j+1 ))
(( binary[j] )) && printf '%s ' ${!i}
done
printf '}\n'
# Increment the indicator.
for (( i=0; binary[i]==1; i++ )) ; do
binary[i]=0
done
binary[i]=1
done