Peki ... zarif ?, evet (sadece hızlı bir örnek):
eval echo $(printf "%s" '{{a..z},{A..Z},{0..9}}'{,,} )
Bu tam ifade büyük olasılıkla bilgisayarınızı engelleyecektir:
eval echo $(printf "%s" '{{a..z},{A..Z},{0..9}}'{,,,,} )
Engellemeyen seçeneklerden biri birkaç döngü kullanmaktır:
nl=$'\n'; tab=$'\t'
n=${1:-3}
eval set -- "$2"
eval "varnames=($(echo {a..z}))"
for i in "${varnames[@]:0:$n}"; do
header+='for '"$i"' do '
middle+='$'"$i"
traile+="done; "
done
loop="${header}${nl} printf %s \"$middle\";${nl}$traile"
#echo "$loop"
eval "$loop"
Şöyle çağırın:
./script 3 '{a..z} {A..Z} {0..9}'
İlk argüman karakter sayısı ve ikincisi kullanılan karakterlerin listesidir (boşlukla ayrılır).
Bu, loopçalıştırılacak komut dosyasıyla bir değişken ( ) oluşturur ve son değerlendirme bu komut dosyasını yürütür. Örneğin:
$ ./script 5 '{a..z} {A..Z} {0..9}'
Değeri loop:
for a do for b do for c do for d do for e do
echo "$a$b$c$d$e";
done; done; done; done; done;