명령줄에서 매개변수를 읽는 것은 매우 쉽습니다.$1 $2 $3
하지만! 분산 루프를 하고 싶다면 입력을 통해 하고 싶지 않고 $1 to $arg1
단일 처리 방법을 배우고 싶습니다 . 루프는 어떻게 합니까?$2 to $arg2
arg1=$1; arg2=$2
$
증가시키려면 $arg
추가 $arg$nr
하고 계산 하면 됩니다 $nr
. 그런데 이를 어떻게 처리합니까 $1
? $$nr
작동 안함..
답변1
배열이 있는 쉘의 경우 전통적인 대답은 배열을 사용하는 것입니다.
arg=( "$@" )
$1
그런 다음 in ${arg[0]}
, $2
in ${arg[1]}
등이 있습니다 .
이를 반복하려면 다음을 사용하십시오.
for a in "${arg[@]}"; do
# code that uses "$a" goes here
done
또는 위치 인수 목록에 여전히 데이터가 있고 입력을 줄이고 싶다면,
for a do
# code that uses "$a" goes here
done
원본 매개변수의 데이터가 분할되거나 글로빙 패턴으로 사용되는 것을 방지하려면 인용이 중요합니다.
답변2
전통적인 대답은 를 사용하는 것입니다 eval
.
for ((i=1; i<=$#; i++))
do
eval "arg$i=\${$i}"
done
(중괄호는 in 과 같이 필요하며 bash
대신 으로 $10
해석됩니다 .)${1}0
${10}