Bashスクリプト入門
Alex Scriven
Data Scientist
Bash の配列は 2 種類あります:
Python: my_list = [1,3,2,4]
R: my_vector <- c(1,3,2,4)
数値インデックス配列の作成方法は Bash で 2 通りあります。
1. 要素なしで宣言
declare -a my_first_array
2. 作成と要素の追加を同時に実行
my_first_array=(1 2 3)
注意: 等号の前後にスペースを入れないでください。
Bash では配列要素の区切りにカンマは使いません。
これは誤り:
my_first_array=(1, 2, 3)
これが正しい:
my_first_array=(1 2 3)
array[@] で全要素を取得できます。なお、これらにアクセスする際は配列名を中括弧で囲む必要があります。my_array=(1 3 5 2)
echo ${my_array[@]}
1 3 5 2
#array[@] で取得しますecho ${#my_array[@]}
4
角括弧で配列要素にアクセスします。
my_first_array=(15 20 300 42)
echo ${my_first_array[2]}
300
インデックス表記で要素を設定します。
my_first_array=(15 20 300 42 23 2 4 33 54 67 66)my_first_array[0]=999echo ${my_first_array[0]}
999
$my_first_array[0]=999 のように $ を付けないでください。動作しません。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
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
括弧を付けずに追記するとどうなるでしょうか。見てみましょう。
例:
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 --version を確認してくださいPython の例:
my_dict = {'city_name': "New York", 'population': 14000000}
R の例:
my_list = list(city_name = c('New York'), population = c(14000000))
連想配列は declare 構文(大文字の -A)でのみ作成できます。
先に宣言してから追加しても、1 行でまとめても構いません。
= の後に値を指定します。連想配列を作ってみましょう:
declare -A city_details # まず宣言city_details=([city_name]="New York" [population]=14000000) # 要素を追加echo ${city_details[city_name]} # キーでインデックス指定して値を取得
New York
1 行で連想配列を作成して代入することもできます
declare -A city_details=([city_name]="New York" [population]=14000000)
連想配列の「キー」は ! で取得します
echo ${!city_details[@]} # すべてのキーを返す
city_name population
Bashスクリプト入門