Можно ли написать скрипт bash, который принимает четырехзначное число в качестве аргумента командной строки и производит все перестановки этого числа с использованием только чистого bash?
1 ответ
0
Возможно. Вот функция, которая будет делать то, что вы просите.
function permutate {
if [ "${#1}" = 1 ]; then
echo "${2}${1}"
else
for i in $(seq 0 $((${#1}-1)) ); do
pre="${2}${1:$i:1}"
seg1="${1:0:$i}"
seg2="${1:$((i+1))}"
seg="${seg1}${seg2}"
permutate "$seg" "$pre"
done
fi
}
Запустите это так:
$ permutate 1234
Это работает с помощью рекурсии. Каждый вызов функции берет один символ из строки и рекурсивно передает остаток самому себе. Таким образом, если ввод 1234, он разбивается на префикс и оставшийся сегмент четыре раза, как это: 1 234
2 134
3 124
4 123
. Затем три символьных сегмента обрабатываются одинаково, затем два символьных сегмента, а затем рекурсия останавливается, когда сегмент состоит только из одного символа.