Seu primeiro trecho não é nada parecido com a sintaxe do shell. É a sintaxe correta do Perl.
Seu segundo trecho não usa cut
corretamente; Eu não sei o que você pretendia.
O shell tem uma construção de divisão de cadeia interna: quando você escreve $somevar
sem nenhuma aspas, o shell primeiro procura o valor da variável somevar
e, em seguida, divide esse valor em palavras separadas nos caracteres especificados por IFS
e, finalmente, interpreta cada palavra como um padrão glob (curinga de arquivo). Assim, você pode dividir uma string configurando IFS
para o caractere separador e desativando temporariamente a globulação.
set -f; IFS=,
arr=($stats)
set +f; unset IFS
Observe que, se um campo contiver espaço em branco, o elemento da matriz reterá esse espaço em branco. Se você deseja dividir em todos os espaços em branco e vírgulas, defina IFS=', '
. Observe que IFS
não é uma string para dividir, mas um conjunto de caracteres para dividir em; um espaço ou uma vírgula constituirão um separador. Além disso, existem regras especiais para espaços em branco: qualquer sequência de zero ou mais espaços seguida por uma vírgula seguida por zero ou mais espaços constituirá um separador, e qualquer sequência de um ou mais espaços também constituirá um separador.
Se você quiser apenas remover os espaços em branco no início ou no final de um campo, terá que fazer isso elemento por elemento.
shopt -s extglob
for ((i=0; i<${#arr[@]}; i++)); do
arr[i]=${arr[i]#+( )} # strip one or more spaces at the beginning
arr[i]=${arr[i]%+( )} # strip one or more spaces at the end
done