- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
# For bash and ksh, we can use faster builtin routines to do manipulation,
# otherwise (ash) fall back to slower method using `expr'.
# The extra level of indirection using `eval' is necessary a) for ksh, and
# b) to get past ash.
if [ "$RANDOM" != "$RANDOM" ]
then
math () {
eval echo "\$(($*))"
}
index () { # index string c
eval "I=\${1%$2*}"
eval echo "\${#I}"
}
...
else
math () {
expr "$@"
}
index () { # index string c
expr $1 : ".*$2" - 1
}
...
fi
Отличный способ определения шелла из старослакварского /dev/MAKEDEV.
Рандом рандому рознь.
Пусть выбираются два рандомных элемента в массиве, а свап между ними происходит по какому-то условию, например зависит от погоды во Вьетнаме.
Например выбираем два случайных элемента, и свопим их только в том случае если первый больше второго, и разница их индексов не больше разницы между самими элементами. Правда я не уверен, будут ли сортироваться любые входные массивы.
> будут ли сортироваться любые входные массивы
Не будут. Пример: [0.6, 0.5]
http://ideone.com/lkKpR1
${1%$2*}, наименьшее совпадение с конца строки в первом аргументе с вторым и удаляет его.