Bashシェルスクリプトで配列要素を 1 つ 1 つ置換する
はじめに
Bash では、配列を作成し、変数に代入できます。
例えば、1〜3 の要素を持つ配列変数は以下のように定義できます。
ここで、 変数 NUMS
の各要素の 1
という文字列を x
に置換したいとします。
ループで置換していけばよいのですが、ループを記述子なくても置換できます。
検証環境
変数の置換記法を使う
Bash には 変数を参照する際にパターンマッチで置換する機能があります。
ここで作成した変数 HELLO
を、参照するタイミングで置換できます。
${変数/検索文字列/置換文字列}
の形式で記述します。
配列変数に対して展開時の置換機能を適用する
先の例では、「文字列」変数に対して置換しました。
「配列」変数に対して同様の置換記法を利用すると、配列の各要素が個別に置換されます。
まずは配列変数を作成します。
置換してみます。配列変数を参照する際の記法に注意です。
このようにすべての要素が置換されました。
前方一致で置換させるためには置換文字列の最初に #
を記述します。
後方一致で置換させるためには置換文字列の最初に #
を記述します。
このように記述することで、ループを書かずに配列の要素を1つずつ置換していくことができます。
ちなみに、 *
を使うか、 @
を使うかについては、後述します 。
シェルスクリプトや関数の引数に対しても各要素の置換ができる
配列変数の各要素を置換した記法ですが、シェルスクリプトや関数の引数に対しても適用できます。
ただし、各要素を置換した新たな配列で for ループを実現したい場合には、 *
ではなく @
を使わなければなりません 。
各要素を置換した結果で新しい配列を作成する
置換後の要素を持つ新たな配列を定義することもできます。
for ループと同様、この場合には添字に *
ではなく @
を使用します。
ひとこと
では、今回紹介した記法を使うのかというとほとんど使った事がありません。
ディスカッション
コメント一覧
まだ、コメントがありません