パイプを使用して配列をサブシェル関数に送信しますか?

パイプを使用して配列をサブシェル関数に送信しますか?

プロセスを1つのスクリプトで一緒に実行できるように、サブシェルに配列をインポートする必要があります。配列をエクスポートできないことを知っていますが、それをサブシェルにパイプすることは可能ですか?どうすればいいですか?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' "$@"
)

おすすめ記事