メモの日々


2023年02月04日(土) [長年日記]

[shell] Bashで配列の各要素の先頭に文字列を追加する

Bashで配列の各要素の先頭に文字列を追加する例をメモ。

$ a=(a b c d e)
$ echo "${a[@]/#//home/}"
/home/a /home/b /home/c /home/d /home/e

Bashのパラメータ展開の次の機能を使っている。

${parameter/pattern/string}

パターンの置換。pattern が展開され、パス名展開の場合と同じようなパターンを作ります。parameter の展開が行われ、その値のうち pattern に最長一致する部分が string に置換されます。pattern が / で始まる場合には、pattern にマッチした部分は全て string に置換されます。そうでない場合には、最初にマッチした部分だけが置換されます。pattern が # で始まる場合には、パターンは parameter を展開した値の先頭にマッチしなければなりません。pattern が % で始まる場合には、パターンは parameter を展開した値の末尾にマッチしなければなりません。string が空の場合には pattern にマッチした部分は削除されます。またこの場合には、pattern の後に続く / は省略可能です。parameter が @ または * である場合、置換操作は全ての位置パラメータに順番に適用され、展開結果はリストとして得られます。parameter が @ または * が添字になっている配列変数である場合、置換操作は配列の全ての要素に順番に適用され、展開結果はリストとして得られます。