LinuCレベル1 102試験の例題と解説
1.06.2シェルスクリプト
LinuCレベル1 102試験の出題範囲から「1.06.2 シェルスクリプト」についての例題を解いてみます。ここでは、変数と配列の扱いについて確認しておきましょう。
例題
次のシェルスクリプトで、標準出力に'banana'を出力したい。
[A]に当てはまるものとして正しいものを1つ選択してください。
#!/bin/bash
my_array=('apple' 'banana' 'cherry')
echo [A]
- $my_array[1]
- ${my_array[1]}
- $my_array{1}
- my_array[1]
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「2. ${my_array[1]}」です。
例題のシェルスクリプトでは、'my_array'というシェル変数に'apple'、'banana'、'orange'の3つの文字列を格納しています。そして、echoコマンドで'banana'を標準出力に出力する部分を穴埋めにしています。
シェル変数とは、シェルで変数名を定義し、値の参照や更新が行える機能です。定義したシェル変数に設定されている値は、変数名の先頭に'$'をつけることで参照することができます。
また、変数に値を設定することを、代入と呼びます。TESTというシェル変数に100という値を代入し、参照をする方法を以下に示します。
$ TEST=100 --- 値の代入
$ echo $TEST --- 値の参照
100
例題のように、複数の値を代入した変数を配列と呼びます。配列では、格納されている値の位置(インデックス)を指定して、値を参照します。インデックスは数値で指定をし、0から始まります。インデックスを指定しない場合は、0番目の値が参照されます。例題の配列'my_array'の場合、インデックスと値の対応は次の通りです。
my_array[0] --- apple
my_array[1] --- banana
my_array[2] --- orange
配列は変数の一種なので、値を参照する際は先頭に'$'を付けます。しかし、'$my_array[0]'と指定をすると、シェルは'$my_array'までを変数、'[0]'は別の文字列として認識します。これは、シェルが変数として認識する文字列の条件が決まっているためです。
このような場合、シェルに変数として認識させたい文字列は'{}'で囲みます。'${my_array[0]}'とすることで、配列my_arrayの0番目の値を参照できます。変数を扱う際は'{}'で囲むことで、想定外の動作を防ぐことができます。
例題の選択肢について解説します。
1. $my_array[1]
'apple[1]'と出力されるため、誤った選択肢です。
''$my_array'までが変数として扱われます。
2. ${my_array[1]}
'banana'と出力されるため、正しい選択肢です。
3. $my_array{1}
'apple{1}'と出力されるため、誤った選択肢です。
'$my_array'までが変数として扱われます。
4. my_array[1]
'my_array[1]'と出力されるため、誤った選択肢です。
変数名の先頭に'$'がついていないので、変数として扱われていません。
今回はシェルスクリプトにおける変数と配列の扱いについて紹介しました。変数や配列は非常に便利ですが、扱い方を間違えると想定外の動作を引き起こします。変数や配列を扱う際の注意点について、確認しておきましょう。
例題作成者
株式会社デージーネット 経営企画室 宮地 智哉