Você pode usar a atribuição de matrizes diretamente:
A0=($(sed '2q;d' /proc/stat))
Tenha em atenção que isto realiza globbing: se a saída do comando contiver caracteres curinga do shell, as palavras que contêm caracteres universais são substituídas pela lista de ficheiros correspondentes, se existirem. Se a saída do comando puder conter um dos caracteres \[?*
, desative temporariamente a globbing:
set -f
A0=($(sed '2q;d' /proc/stat))
set +f
Isso pode ser minúsculo mais rápido do que usar read
:
$ time for i in {1..1000}; do read -a A0 <<< $(sed '2q;d' /proc/stat); done
real 0m2.829s
user 0m0.220s
sys 0m0.480s
$ time for i in {1..1000}; do A0=($(sed '2q;d' /proc/stat)); done
real 0m2.388s
user 0m0.128s
sys 0m0.276s
Com bash
4.0 e acima, você pode usar mapfile
:
mapfile -t < <(sed '2q;d' /proc/stat)
Mas mapfile
parece ser mais lento:
$ time for i in {1..1000}; do mapfile -t < <(sed '2q;d' /proc/stat); done
real 0m3.990s
user 0m0.104s
sys 0m0.444s