Bash の配列

Bashスクリプト入門

Alex Scriven

Data Scientist

配列とは

Bash の配列は 2 種類あります:

  • 配列
    • 通常の数値インデックスの構造
    • Python では list、R では vector と呼ばれます

Python: my_list = [1,3,2,4]

R: my_vector <- c(1,3,2,4)

Bashスクリプト入門

Bash で配列を作成

数値インデックス配列の作成方法は Bash で 2 通りあります。

1. 要素なしで宣言

declare -a my_first_array

2. 作成と要素の追加を同時に実行

my_first_array=(1 2 3)

注意: 等号の前後にスペースを入れないでください。

Bashスクリプト入門

カンマに注意

Bash では配列要素の区切りにカンマは使いません。

これは誤り:

my_first_array=(1, 2, 3)

これが正しい:

my_first_array=(1 2 3)
Bashスクリプト入門

配列の重要なプロパティ

  • array[@] で全要素を取得できます。なお、これらにアクセスする際は配列名を中括弧で囲む必要があります。
my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
  • 配列の長さは #array[@] で取得します
echo ${#my_array[@]}
4
Bashスクリプト入門

配列要素の操作

角括弧で配列要素にアクセスします。

my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
  • 注意: Bash の配列は Python 同様 0 始まりです(R は異なります)。
Bashスクリプト入門

配列要素の操作

インデックス表記で要素を設定します。

my_first_array=(15 20 300 42 23 2 4 33 54 67 66)

my_first_array[0]=999
echo ${my_first_array[0]}
999
  • 注意: インデックスを上書きする際に $my_first_array[0]=999 のように $ を付けないでください。動作しません。
Bashスクリプト入門

配列要素の操作

array[@]:N:M で配列の一部をスライスします。

  • N は開始インデックス、M は取得する要素数です。
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)
echo ${my_first_array[@]:3:2}
42 23
Bashスクリプト入門

配列への追記

array+=(elements) で配列に追記します。

例:

my_array=(300 42 23 2 4 33 54 67 66)

my_array+=(10) echo ${my_array[@]}
300 42 23 2 4 33 54 67 66 10
Bashスクリプト入門

配列に(未)追記

括弧を付けずに追記するとどうなるでしょうか。見てみましょう。

例:

my_array=(300 42 23 2 4 33 54 67 66)
my_array+=10
echo ${my_array[@]}
30010 42 23 2 4 33 54 67 66

文字列 10 が最初の要素に連結されるだけです。望む動作ではありません。

Bashスクリプト入門

連想配列

  • 連想配列
    • 通常の配列に似ていますが、数値インデックスではなくキーと値の組です
    • Python の dictionary、R の list に相当
    • 注意: Bash 4 以降でのみ利用可能。最新の Mac でも古い Bash の場合があります。ターミナルで bash --version を確認してください

Python の例:

my_dict = {'city_name': "New York", 'population': 14000000}

R の例:

my_list = list(city_name = c('New York'), population = c(14000000))
Bashスクリプト入門

連想配列の作成

連想配列は declare 構文(大文字の -A)でのみ作成できます。

先に宣言してから追加しても、1 行でまとめても構いません。

  • 'キー' は角括弧で囲み、= の後に値を指定します。
    • 複数要素を一度に追加できます。
Bashスクリプト入門

連想配列の例

連想配列を作ってみましょう:

declare -A city_details # まず宣言

city_details=([city_name]="New York" [population]=14000000) # 要素を追加
echo ${city_details[city_name]} # キーでインデックス指定して値を取得
New York
Bashスクリプト入門

連想配列の作成

1 行で連想配列を作成して代入することもできます

  • それ以外は同じです
declare -A city_details=([city_name]="New York" [population]=14000000)

連想配列の「キー」は ! で取得します

echo ${!city_details[@]} # すべてのキーを返す
city_name population
Bashスクリプト入門

Ayo berlatih!

Bashスクリプト入門

Preparing Video For Download...