GNU 병렬: 배열 요소를 어떻게 참조할 수 있나요?

GNU 병렬: 배열 요소를 어떻게 참조할 수 있나요?

이것은 내 사례 시나리오입니다.

luis@Balanceador:~$ echo ${array[@]}
a b
luis@Balanceador:~$ echo ${array[1]}
a
luis@Balanceador:~$ echo ${array[2]}
b
luis@Balanceador:~$ parallel echo ${array[]} ::: 1 2
-bash: ${array[]}: bad substitution
luis@Balanceador:~$ parallel echo ${array[{}]} ::: 1 2
-bash: {}: syntax error: operand expected (error token is "{}")
luis@Balanceador:~$ parallel echo ${array[{1}]} ::: 1 2
-bash: {1}: syntax error: operand expected (error token is "{1}")
luis@Balanceador:~$ parallel echo ${array[{#}]} ::: 1 2
-bash: {#}: syntax error: operand expected (error token is "{#}")

GNU Parallel에서 일부 배열의 개별 요소를 어떻게 참조할 수 있습니까?

물론 이것은 쉬운 일이지만 매뉴얼에서 찾을 수 없었습니다.

이 질문은 대답하기 위해 만들어졌습니다이 다른, 하지만 물어본 후에는 두 가지 다른 질문이라고 생각했습니다.

답변1

쉬워보이지만 실제로는 매우 어렵습니다.

GNU Parallel에 의해 시작된 작업은 GNU Parallel이 실행되는 동일한 셸 내에서 시작되지 않습니다. 따라서 다음과 같습니다.

bash[1]---perl(running parallel)---bash[2]

$array는 bash[1]에 정의되어 있지만 bash[2]에서 사용하고 싶습니다. 완전히 수행하는 것은 불가능합니다(예: 배열에 대한 쓰기 액세스를 원하는 경우).~할 수 있다~을 만들다복사사용 가능한 $array 수:

env_parallel 'echo ${array[{}]}' ::: 1 2

env_parallel(GNU Parallel 20140822에 도입됨)은 bash[1]의 전체 환경을 작업이 실행되기 전에 시작되는 bash[2](따라서 환경이 다소 작아야 함)에 복사합니다.

env_parallel상당히 불안정하므로 버그를 발견하면 신고해주세요.

관련 정보