ユーザー定義関数で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
変数はローカル変数ではなくグローバル変数として生成されます。