zsh:コマンドを配列にマッピングする

zsh:コマンドを配列にマッピングする

配列があるとしましょう。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

おすすめ記事