Shellの配列を全体参照する際、使用可能な記号としてアスタリスクとアットマークがあります。
これらの挙動の違いについて解説します。
はじめに
配列を全体参照(全ての要素を参照)する場合、以下の2つの記号を使用することが出来ます。
- @(アットマーク)
- *(アスタリスク)
これらの記号は、配列の全体参照を行うときに使用しますが、同じ動きになります。
[root@STKWPS001 ws]# array=("りんご" "メロン" "ぶどう") [root@STKWPS001 ws]# echo ${array[@]} りんご メロン ぶどう [root@STKWPS001 ws]# echo ${array[*]} りんご メロン ぶどう
次項で、どのような場合に挙動が変わってくるのか説明していきたいと思います。
挙動の違いについて
これらの記号を使用した際の挙動が変わる条件として、ダブルクォーテーションで囲むというものがあります。
では、実際に「@」と「*」を使用した状態で、ダブルクォーテーションで囲むとどうなるか見ていきましょう。
まず「@」を使用した場合ですが、配列の要素が個別の要素として扱われます。
[root@STKWPS001 ws]# array=("りんご" "メロン" "ぶどう") [root@STKWPS001 ws]# for item in "${array[@]}"; do echo ${item}; done りんご メロン ぶどう
次に「*」を使用した場合ですが、配列の全ての要素が1つの要素として扱われます。
[root@STKWPS001 ws]# array=("りんご" "メロン" "ぶどう") [root@STKWPS001 ws]# for item in "${array[*]}"; do echo ${item}; done りんご メロン ぶどう
ダブルクォーテーションを使用する場面
前項では、ダブルクォーテーションで囲んだ場合に挙動が変わるということを説明しました。
では、ダブルクォーテーションを使用しないという選択もありますが、それが出来ない場面があります。
どのような場面で、ダブルクォーテーションが必要となるのか見ていきたいと思います。
ダブルクォーテーションが必要となるのは、要素に半角スペースが含まれている場合です。
まず、要素に半角スペースが含まれている状態で、ダブルクォーテーションで囲まない例です。
以下のように、半角スペース前後で別の要素として扱われてしまいます。
[root@STKWPS001 ws]# array=("山田一郎" "山本 次郎" "鈴木三郎") [root@STKWPS001 ws]# for item in ${array[@]}; do echo ${item}; done 山田一郎 山本 次郎 鈴木三郎
次に、ダブルクォーテーションで囲む場合の例です。
以下のように、半角スペースが含まれた要素も1つの要素として扱われるようになりました。
[root@STKWPS001 ws]# for item in "${array[@]}"; do echo ${item}; done 山田一郎 山本 次郎 鈴木三郎
記事は以上となりますが、結論として、ダブルクォーテーションと「@」の組み合わせが、for文などを使用する際、最も最適な挙動になるということが分かりました。
リンク
コメント