저는 소문자와 숫자의 모든 조합을 생성하고 이를 에코하는 스크립트를 만들었습니다. 작동하지만, 추가하고 싶은 새 캐릭터마다 새 기능을 만들어야 하는 현재 접근 방식보다 새 캐릭터를 추가하는 프로세스를 단순화할 수 있는 방법이 있는지 궁금합니다. 이것은 내 스크립트입니다.
declare -r LIST=$(echo {a..z} {0..9})
function word_generation_2 {
for char1 in ${LIST}; do
for char2 in ${LIST}; do
echo ${char1}${char2}
done
done
}
function word_generation_3 {
for char1 in ${LIST}; do
for char2 in ${LIST}; do
for char3 in ${LIST}; do
echo ${char1}${char2}${char3}
done
done
done
}
function word_generation_4 {
for char1 in ${LIST}; do
for char2 in ${LIST}; do
for char3 in ${LIST}; do
for char4 in ${LIST}; do
echo ${char1}${char2}${char3}${char4}
done
done
done
done
}
function word_generation_5 {
for char1 in ${LIST}; do
for char2 in ${LIST}; do
for char3 in ${LIST}; do
for char4 in ${LIST}; do
for char5 in ${LIST}; do
echo ${char1}${char2}${char3}${char4}${char5}
done
done
done
done
done
}
for ((i = 2; i < 6; i++)); do
word_generation_${i}
done
출력은 다음과 같습니다
aa
...
99999
나는 그것을 그대로 유지하고 싶다. 먼저 2개의 문자로 구성된 모든 조합, 그 다음에는 3개의 문자로 구성된 모든 조합 등입니다.
답변1
Bash 또는 지원하는 다른 것에서정렬, 문자 세트를 배열에 넣은 다음 배열을 다시 반복하여 앞에 문자를 다시 추가할 수 있습니다.
chars=( {a,b,c} )
doubles=()
triplets=()
for c in "${chars[@]}" ; do
doubles+=( ${chars[@]/#/$c} )
done
for c in "${chars[@]}" ; do
triplets+=( ${doubles[@]/#/$c} )
done
echo "${triplets[@]}"
인쇄하면 aaa aab aac ... ccc
필요한 경우 더 긴 내용을 반복하거나 재귀 기능으로 전환할 수 있습니다. ( ${var//}
이것은패턴 교체여기서 #
문자열의 시작을 표시합니다. 배열에 적용하면 다음에 적용됩니다.모두값을 한 번에 하나씩 배열합니다. )