Расширение фигурной скобки не определяется POSIX как таковое, для преобразования необходимо использовать параметры из других средств подачи жалоб POSIX. Одним из таких способов было бы использование таблицы ASCII для отображения преобразования значений ASCII символов в их значение символов с помощью printf()
. Найдите man ascii
для отображения значений.
i=1
asciiStart=97
asciiEnd=99
while [ "$i" -le 5 ]
do
while [ "$asciiStart" -le "$asciiEnd" ]
do
echo "$HOME$i$(printf "\\$(printf '%03o' "$asciiStart")")"
asciiStart=$((asciiStart + 1))
done
asciiStart=97
i=$(( i + 1 ))
done
Похоже, вы хотите использовать массив:
read x
for (( a=0; a<x; ++a)); do
variable[a]=$RANDOM
done
printf 'First value is %s\n' "${variable[0]}"
printf 'All values (one by one): %s\n' "${variable[@]}"
printf 'All values (as one string): %s\n' "${variable[*]}"
Ко второй части вашего вопроса:
arg=( "$@" )
printf 'First command line argument: %s\n' "${arg[0]}"
Также обратите внимание, что вы можете легко перебрать все аргументы командной строки (или что-то еще, что находится в $@
), не сохраняя их в каком-либо специальном месте:
for arg do
printf 'Got command line argument: %s\n' "$arg"
done
Вам нужно eval
присвоить (, но лучше использовать массив ).
#!/bin/bash -vx
read x
for ((a=0;a<x;++a)); do
eval variable$a=${RANDOM}
done
Изman bash
eval [arg...]
The args are read and concatenated together into a single command.
This command is then read and executed by the shell, and its exit
status is returned as the value of eval.
Как насчет (нужна последняя оболочка)
for ((a=0;a<x;++a))
do read variable$a <<<${RANDOM}
done