세 개의 추가 변수를 생성하는 변수 배열에 대해 루프를 실행하고 있습니다.
즉
for foo in ${bar[@]};
do bar1=$(echo $foo | awk '{print$1}');
bar2=$(echo $foo | awk '{print$2}');
bar3=$(echo $foo | awk '{print$3}');
done
그러나 루프가 완료되면 새로 생성된 세 개의 변수가 배열 자체가 되어야 하며, for 루프를 실행할 수도 있습니다.
즉
for foo in ${bar1[@]}
do echo $foo
done
^^^^여러 줄이 표시되어야 합니다.
누구든지 이것을 달성할 수 있는 방법을 제안할 수 있습니까?
답변1
사용
bar1+=($(echo $foo | awk '{print$1}'))
즉, 배열에 값을 추가합니다. 물론 코드는variable+=( value )
사용배열 bar1
은 다음과 같아야 합니다.
for foo in "${bar1[@]}"
do
echo "$foo"
done
물론, 타당한 이유가 없는 한 항상 쉘 변수(예: "$foo"
및 )를 인용해야 합니다."${bar1[@]}"
틀림없이당신은 당신이 무엇을하고 있는지 알고 있습니다.
답변2
여기에는 세 개의 파이프가 필요하지 않습니다. read
문자열에서 추출할 처음 세 개의 필드만 있으면 됩니다.
for foo in "${bar[@]}"; do
read bar1 bar2 bar3 the_rest <<< "$foo"
done
the_rest
foo
이는 "abc d"와 같은 것이 가능하고 이를 로 설정하고 싶지 않은 경우 에만 bar3
필요합니다 c d
.