Создать n переменных в Bash, не присваивая их по одной?

Расширение фигурной скобки не определяется 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
0
22.08.2018, 14:12
4 ответа

Похоже, вы хотите использовать массив:

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
2
28.01.2020, 02:23

Вам нужно 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.
0
28.01.2020, 02:23

Попробуйте это,

read x

for ((a=0;a<x;++a)); do
 declare -i variable$a=${RANDOM}
done
Команда

declare позволяет присвоить значение переменной в том же операторе, что и установка ее свойств.

1
28.01.2020, 02:23

Как насчет (нужна последняя оболочка)

 for ((a=0;a<x;++a))
   do  read variable$a <<<${RANDOM}
   done
0
28.01.2020, 02:23

Теги

Похожие вопросы