Bash で配列を返す

Olorunfemi Akinlua 2023年6月20日
  1. コマンド置換
  2. コマンド置換を使用して Bash で配列を返す
  3. IFS を使用して Bash で配列を返す
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 が文字列を単語またはトークンに分割する方法を制御します。 デフォルトでは、IFSspacetab、および 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 Akinlua avatar Olorunfemi Akinlua avatar

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

関連記事 - Bash Array