ユーザー定義関数のローカル配列によるBash配列の宣言

ユーザー定義関数のローカル配列によるBash配列の宣言

ユーザー定義関数でbash配列をローカル配列として宣言できますか? Bash配列に常にグローバルスコープがあることを確認してください。

ベストアンサー1

はい、配列は関数のローカル配列です。関数内でlocalキーワードを使用して宣言してください。以下はスクリプトの例です。

#!/usr/bin/env bash

global_ary=( one two )

function my_func () {
  local local_ary=( three four )
  echo "In my_func function:"
  echo "global_ary: ${global_ary[@]}"
  echo "local_ary: ${local_ary[@]}"
  echo
}

echo "In main script:"
echo "global_ary: ${global_ary[@]}"
echo "local_ary: ${local_ary[@]}"
echo

my_func

echo "In main script again:"
echo "global_ary: ${global_ary[@]}"
echo "local_ary: ${local_ary[@]}"
echo

上記のスクリプトは、グローバル配列と関数をローカル配列で埋めます。関数を呼び出す前、呼び出し中、呼び出し後に両方の配列の内容を印刷します。出力は次のとおりです。

In main script:
global_ary: one two
local_ary:

In my_func function:
global_ary: one two
local_ary: three four

In main script again:
global_ary: one two
local_ary:

予想どおり、グローバル配列は基本スクリプトと関数で使用できます。ローカル配列は関数内でのみ使用できるため、関数のみがそのecho "local_ary: ${local_ary[@]}"内容を表示します。

実験的にlocalキーワードをに変更declareまたは削除できます(行を保持local_ary=( three four ))。これにより、local_ary変数はローカル変数ではなくグローバル変数として生成されます。

おすすめ記事