ここに参加しました。
配列のデータを別の変数に格納するスクリプトを作成しています。
例:
for((i=0; i < Counter; i++)); do
while read -r Parmfilesjobid; do
IFS=$'\n' read -d '' -r -a "job$i" < ${Parmfilesjobid[$i]}
done <<< "${Parmfilesjobid}"
done
forループを実行する回数が異なる可能性があるため、カウンタは別々の変数です。
$I は毎回増加するので、job$i を job0、job1、job2 に変換する方法を見てみましょう。
これは、各job $ iに別々の値が含まれているためです。
私が使用するとき:
echo ${job1[@]}
echo ${job2[@]}
echo ${job3[@]}
各job $ i(job0、job1、job2)に対して正しい出力を取得できます。
しかし、bashがjob $ iをjob0、job1、job2に変換して、別のループで別々の変数として使用できるようにしたいです。
迅速な回答ありがとうございます!
入力が何であるかを説明しようとしています。
いくつかのパラメーターを含むファイルがあります。これらのパラメータはファイルごとに異なりますが、常に同じ種類のデータが含まれています。これには、UNCパスを形成するために結合された顧客ID、注文ID、およびグループIDが含まれます。
これまで、スクリプトはファイルを見つけて配列に配置し、最初の投稿のforループから各個々のファイルからデータを抽出して別の配列(job $ i)に入れます。その後、私は詰まった。
各タスクを個別にエコーし、ここに含まれるデータをインポートできます。echo $job0 echo job1 echo job2
データを抽出してパスに入れるには、各job $ iに対してforループを実行する必要があるため、他のforループをjob $ iで機能させる方法を見つける必要があります。
答え1
read -r "job$i" < ...
これが機能しなければならない場合i=3
はread
設定する必要がありますjob3
。
しかし、ループが少し間違っているようです。
for((i=0; i < Counter; i++)); do
while read -r Parmfilesjobid; do
IFS=$'\n' read -d '' -r -a "job$i" < ${Parmfilesjobid[$i]}
値のみwhile read
を入力するのでParmfilesjobid
設定${Parmfilesjobid[1]}
は解除されます。 (もちろん、スカラーアプローチは$var
withと同じように機能する${var[0]}
ため、Parmfilesjobid
以前に配列に設定した場合は、他のインデックスの値もあるかもしれませんが、read
when以外には値を使用しませんi=0
。
また、Parmfilesjobid
ループwhile read...
および使用された変数への入力として使用していますread
。これは少し混乱し、その後の反復では、前の反復でfor
最後while
に読み取った内容を入力として持つことになります。Parmfilesjobid
ちょっと変なようです。
あなたの意見を見たことがないので、ここで何をしたいのかわかりません。しかし、私はこのようなものが近いと思います。
i=0
while read -r filename ; do
IFS=$'\n' read -d '' -r -a "job$i" < "$filename"
let i++
done <<< "${var_with_filenames}"