コマンドラインからパラメータを読み取るのはとても簡単です。$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}