58
array=(a b c d)

これを行うために、配列の各要素の前に文字を追加したいと思います

array=(^a ^b ^c ^d)

これを行う簡単な方法は、配列要素をループして、値を 1 つずつ変更することです。

for i in "${#array[@]}"
do
    array[i]="^"array[i]
done

しかし、すべての要素で同じ命令を実行する必要があるため、配列をループせずに同じことを行う方法があるかどうかを知りたいです。

前もって感謝します。

4

2 に答える 2

91

パラメータ展開を使用する:

array=("${array[@]/#/^}")

ドキュメントから:

${パラメータ/パターン/文字列}

パターン置換。パス名の展開と同様に、パターンが展開されてパターンが生成されます。パラメータが展開され、その値に対するパターンの最長一致が文字列に置き換えられます。pattern が / で始まる場合、pattern のすべての一致が文字列に置き換えられます。通常、最初の一致のみが置き換えられます。パターンが # で始まる場合、パラメーターの展開された値の先頭で一致する必要があります。パターンが % で始まる場合、パラメーターの展開された値の最後で一致する必要があります。文字列が null の場合、一致するパターンは削除され、/ に続くパターンは省略される場合があります。パラメータが @ または * の場合、置換操作は各定位置パラメータに順番に適用されます。展開は結果のリストです。parameter が @ または * で添字付けされた配列変数である場合、置換操作は配列の各メンバーに順番に適用され、展開は結果のリストになります。

于 2012-10-05T10:19:59.407 に答える
8

この方法では、配列値の空白も尊重されます。

array=( "${array[@]/#/^}" )

配列が空で、以前に設定した場合、これは失敗することに注意してください

set -u

ショートコードを使用してこの問題を解決する方法がわかりません...

于 2014-01-06T18:48:30.900 に答える