변수 이름의 마지막 부분을 추가합니다.

변수 이름의 마지막 부분을 추가합니다.

방금 여기에 가입했어요.

배열의 데이터를 별도의 변수에 저장하는 스크립트를 작성 중입니다.

예:

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]}이 해제됩니다. (물론 스칼라 접근은 $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}"

관련 정보