Saya ingin menulis skrip bash untuk mencetak semua kemungkinan permutasi huruf kecil dan besar dari kata tertentu, mis. harley:
harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY
Solusi naif saya adalah menulis n-th (n is len(word)) for-loop bersarang untuk kata khusus ini:
#!/bin/bash
for a in {h,H}; do
for b in {a,A}; do
...
done
done
Namun, saya harus mengkodekan skrip untuk kata yang berbeda lagi.
Apakah ada cara yang lebih baik untuk mencapai ini?
Jawaban yang Diterima:
Solusi yang sedikit lebih baik:
echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
Untuk skalabilitas penuh:
echo harley \
| perl -nle 'print "echo ",
join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c "{}"
Jika Anda benar-benar harus memiliki satu kata per baris, gunakan
for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
terima kasih atas komentar mattdm
Versi terukur yang sesuai adalah:
echo harley \
| perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
| xargs -I {} bash -c 'for w in {};do echo $w;done'
Untuk bersenang-senang, coba ganti "harley" dengan "supercalifragilisticexpialidocious" Sudah 5 menit dan komputer saya masih bekerja dengan yang ini dan mungkin tidak akan pernah selesai
Gunakan _roff Untuk Menggarisbawahi Kata?
Jalankan Perintah Menggunakan Argumen yang Berasal Dari Array?