Вы поместили токен глобуса *
не в то место, если перед :
, если вы используете ##
(или #
]), чтобы избавиться от части слева:
${PATH#*:} ## Non-greedy
${PATH##*:} ## Greedy
Используйте массив для хранения значений и выбирайте между ними с помощью встроенной переменной $RANDOM
. Например,
x[0]=10 # One decade
x[1]=100 # One century
x[2]=1000 # One millennium
for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10
Качество случайности не будет наилучшим (для этого считайте байты из /dev/urandom
),но это должно быть более чем достаточно хорошо для сценария.
Примечание 1: Как заметили люди в комментариях, вместо инициализации элементов массива по отдельности можно, конечно, использовать массив litteral: x=(10 100 1000)
.
Примечание 2: Вместо жесткого кодирования количества элементов в массиве, элемент radom может быть извлечен ${x[$RANDOM%${#x[@]}]}
.
case $(( RANDOM % 3 )) in
0)
var=10
;;
1)
var=100
;;
2)
var=1000
;;
esac
Если вы используете bash (или zsh или ksh93), вы можете просто сделать:
echo "$((10**($RANDOM%3+1)))"
или
var=$((10**($RANDOM%3+1)))
назначить его на var
Вот немного загадочный способ:
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
Это присвоит случайное значение ] $ var
по мере необходимости. Строка формата printf
имеет вид 1% 0Nd
- это приводит к тому, что 0
печатается с N
начальными нулями, где N
будет случайным целым числом в интервале [1,3]
.