配列があるとしましょう。a=(foo 'bar baz')
各配列要素にコマンド/関数を適用し、結果の文字列を別の配列に格納するよりも確実な方法はありますか?
b=()
for e in $a; do
b+=("$(my_cmd "$e")")
done
ベストアンサー1
これに対する関数はいつでも宣言できます。
map() {
local arrayname="$1" cmd="$2" i
shift 2
eval "$arrayname=()"
for i do
eval "$arrayname+=(\"\$($cmd)\")"
done
}
次のように使用されます。
$ a=(a '' bcd)
$ map b 'wc -c <<< "$i"' "$a[@]"
$ echo $b
2 1 4