Bash で配列を返す
Bash は配列を処理しないため、配列を返すのは少し難しい場合があります。 ただし、グローバル変数またはコマンド置換の回避策を利用して関数から配列を返すことにより、この制限を回避することは可能です。
この記事では、グローバル変数を必要とせずに bash で配列を返す方法であるコマンド置換について説明します。
コマンド置換
これがどのように機能するかを理解するには、まずコマンド置換とは何か、および Bash でどのように機能するかを理解する必要があります。
コマンド置換と呼ばれる Bash 機能を使用すると、コマンドの出力をコマンド自体の代わりに使用できます。 これは、次のように、コマンドをバッククォート (``) または $()
のペアで囲むことによって行われます。
echo "The current date is: `date`"
出力:
The current date is: Fri Nov 29 16:14:23 PST 2022
上記の例では date
コマンドが実行され、コマンド自体の代わりにその出力が置き換えられます。 これにより、コマンドの出力を文字列に直接埋め込むことができ、多くの状況で役立ちます。
コマンド置換を使用して Bash で配列を返す
それでは、コマンド置換を使用して Bash の関数から配列を返す方法を見てみましょう。
まず、1 から 10 までの数値の配列を返し、コマンド置換を使用する get_array
という関数を作成しましょう。 次に、関数を呼び出して出力を変数 result
に保存します。出力します。
function get_array() {
local my_array=(1 2 3 4 5 6 7 8 9 10)
echo "${my_array[@]}"
}
result=$(get_array)
echo "The result is: $result"
出力:
The result is: 1 2 3 4 5 6 7 8 9 10
上記の関数では、1 から 10 までの数値を含む my_array
という配列を作成します。次に、echo
を使用して配列を出力し、それを引用符で囲んで、配列要素が単一の文字列として保持されるようにします。 その後、get_array
関数を呼び出し、その出力を result
変数に格納します。 次に、1 から 10 までの数値の配列である result
変数の内容を出力します。
IFS
を使用して Bash で配列を返す
では、配列の要素を取得する方法を見てみましょう。 配列要素は単一の文字列として返されるため、IFS
(Internal Field Separator) 変数を使用して文字列を個々の要素に分割する必要があります。
IFS
変数は、bash が文字列を単語またはトークンに分割する方法を制御します。 デフォルトでは、IFS
は space
、tab
、および newline
に設定されています。これは、bash がこれらの文字のいずれかで文字列を単語に分割することを意味します。
get_array
関数によって返された文字列を個々の要素に分割するには、IFS
を空白文字に設定する必要があります。
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
出力:
Element 0: 1
Element 1: 2
Element 2: 3
Element 3: 4
Element 4: 5
Element 5: 6
Element 6: 7
Element 7: 8
Element 8: 9
Element 9: 10
上記のコードでは、IFS
をスペース文字に設定しています。これにより、get_array
関数によって返された文字列を個々の要素に分割できます。 次に、結果を result_array
変数に格納し、for
ループを使用して配列の要素を出力します。
このメソッドが数値の配列ではなく文字列の配列を返す方法を見てみましょう。
まず、get_array
関数を変更して、文字列の配列を返します。
function get_array() {
local my_array=("one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten")
# Return the array using the command substitution
echo "${my_array[@]}"
}
上記の関数では、one
から ten
までの文字列を含む my_array
という配列を作成します。 次に、echo
を使用して配列を出力し、それを引用符で囲んで、配列要素が単一の文字列として保持されるようにします。
get_array
関数を使用して文字列の配列を返す方法を調べてみましょう。
IFS=' '
result=$(get_array)
result_array=($result)
for i in "${!result_array[@]}"; do
echo "Element $i: ${result_array[$i]}"
done
出力:
Element 0: one
Element 1: two
Element 2: three
Element 3: four
Element 4: five
Element 5: six
Element 6: seven
Element 7: eight
Element 8: nine
Element 9: ten
上記のコードでは、get_array
関数を呼び出し、その出力を result
変数に格納します。 次に、文字列を個々の要素に分割し、result_array
変数に格納します。
最後に、for
ループを使用して配列の要素を出力します。
結論として、bash は配列をサポートしていないため、bash で配列を返すのは難しい場合があります。 ただし、コマンド置換と呼ばれる方法を使用して機能を持たせることができます。
これには、配列を引用符で囲み、echo
を使用して出力し、結果の文字列を IFS
変数を使用して個々の要素に分割する必要があります。
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn