明示的に割り当てずにシェルスクリプトでn個の変数を作成するには?var1
、、...のループを作成するのと同じことを意味しますvar2
。var3
たとえば、以前に設定した変数は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