Suponho que você queira a saída do echo ... | awk
armazenado em uma variável e, em particular, anexada a um dos arrays.
Primeiro, para capturar a saída de um comando, use "$( cmd... )"
(substituição de comando). Como um exemplo trivial, isso imprime seu nome de host:
var=$(uname -n)
echo $var
Em segundo lugar, para anexar a um array, você precisa usar a sintaxe de atribuição de matriz, com parênteses em torno do lado direito. Isso acrescentaria o valor de var
à matriz:
array+=( $var )
Em terceiro lugar, a expansão de $var
e a substituição de comandos $(...)
estão sujeitas à divisão de palavras, portanto, você deseja usar parênteses em torno deles. Novamente, um exemplo trivial, isso coloca a saída completa de uname -a
como um elemento único na matriz:
array+=( "$(uname -a)" )
Ou, no seu caso, na íntegra:
data1+=( "$(echo "$1" | tr ' ' '\n'| awk 'f{print;f=0;exit} /of/{f=1}')" )
(Observe que as aspas dentro da substituição do comando são distintas das aspas fora dele. A citação antes de $1
não impede que as citações sejam iniciadas fora $()
, diferentemente do que a sintaxe hilighting no SE parece implicar.)
Você pode simplificar a leitura colocando o pipeline em uma função:
get_data1() {
echo "$name" | tr ' ' '\n'| awk 'f{print;f=0;exit} /of/{f=1}'
}
...
data1+=( "$(get_data1)" )
Ou, como os pipelines parecem semelhantes, use a função para evitar a repetição do código:
get_some_field() {
echo "$1" | tr ' ' '\n'| awk -vkey="$2" 'f{print;f=0;exit} $0 ~ key {f=1}'
}
e depois
data1+=( "$(get_some_field "$name" of)" )
data2+=( "$(get_some_field "$name" is)" )
data3+=( "$(get_some_field "$name" size)" )
(Se eu leio seu pipeline corretamente, isto é, eu não testei o código acima.)