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 が @ または * が添字になっている配列変数である場合、置換操作は配列の全ての要素に順番に適用され、展開結果はリストとして得られます。