1つずつ割り当てずにBashでn個の変数を作成しますか?

1つずつ割り当てずにBashでn個の変数を作成しますか?

明示的に割り当てずにシェルスクリプトでn個の変数を作成するには?var1、、...のループを作成するのと同じことを意味しますvar2var3たとえば、以前に設定した変数はvarx次のとおりです。x

read x

for ((a=0;a<x;++a)); do
 variable$a=${RANDOM}
done

x(今はそれが文字列である可能性を無視しましょう。しかし、明らかにこれはうまくいきません。どうすればいいですか?

私が本当に望むのは、スクリプトを実行するときにコマンドラインに書き込んだ各引数が、独自の変数、ARG1... ARG2、およびARGn...が値になることです。したがって、おそらくこれらの項目がたくさんあるでしょう。変数はパラメータに設定されます。${1}${2}${n}

答え1

配列を使用したいようです。

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[*]}"

質問の2番目の部分は次のとおりです。

arg=( "$@" )

printf 'First command line argument: %s\n' "${arg[0]}"

$@また、特別な場所に保存せずに、すべてのコマンドライン引数(またはで発生したすべての作業)を簡単に繰り返すことができます。

for arg do
    printf 'Got command line argument: %s\n' "$arg"
done

答え2

この試み、

read x

for ((a=0;a<x;++a)); do
 declare -i variable$a=${RANDOM}
done

発表するこのコマンドを使用すると、変数の属性が設定されているのと同じステートメントで変数に値を割り当てることができます。

答え3

割り当てる必要があります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.

答え4

どうですか(一番近いシェルが必要です)

 for ((a=0;a<x;++a))
   do  read variable$a <<<${RANDOM}
   done

関連情報