파이프를 사용하여 배열을 서브쉘 함수로 보내시겠습니까?

파이프를 사용하여 배열을 서브쉘 함수로 보내시겠습니까?

프로세스가 하나의 스크립트에서 함께 실행될 수 있도록 하위 쉘에 배열을 가져와야 합니다. 배열을 내보낼 수 없다는 것을 알고 있지만 이를 서브셸로 파이프하는 것이 가능합니까? 어떻게 해야 합니까? running()메인 프로그램에서 배열이 변경될 때 배열을 업데이트할 수 있도록 콘텐츠가 필요하다는 함수가 있다고 가정해 보겠습니다 . 너무 느리기 때문에 배열을 파일에 저장하고 싶지 않습니다.

답변1

myfunction() ( ... )함수를 만드는 대신 myfunction() { ... }(하위 쉘에서 실행되도록) 사용하고 배열을 함수 인수로 전달하십시오.

myfunc() (
  for f in "$@"; do
    printf '%s\n' "$f"
  done
)

myfunc these arguments "are passed" 'to myfunc'

myarray=( "These values" "are set as" part 'of an array' )

myfunc "${myarray[@]}"

출력은 다음과 같습니다.

these
arguments
are passed
to myfunc
These values
are set as
part
of an array

참고: 이는 단지 예시 함수일 뿐이지만 실제로는 동일한 작업을 수행하는 더 간단한 버전입니다.

myfunc_simpler() (
  printf '%s\n' "$@"
)

관련 정보