変数名の最後の部分を追加します。

変数名の最後の部分を追加します。

ここに参加しました。

配列のデータを別の変数に格納するスクリプトを作成しています。

例:

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=3read設定する必要があります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]}は解除されます。 (もちろん、スカラーアプローチは$varwithと同じように機能する${var[0]}ため、Parmfilesjobid以前に配列に設定した場合は、他のインデックスの値もあるかもしれませんが、readwhen以外には値を使用しません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}"

関連情報