명시적으로 할당하지 않고 쉘 스크립트에서 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[*]}"
질문의 두 번째 부분은 다음과 같습니다.
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