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]에서 사용하고 싶습니다. 완전히 수행하는 것은 불가능하지만(예: 배열에 대한 쓰기 액세스를 원하는 경우)할 수 있는어떤 것을 만들어복사사용 가능한 $배열:

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

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

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

관련 정보