Se fosse eu, eu iria carregar o array assim:
#!/bin/bash
string="file_20160825_namegoeson"
myarray[0]="${string:5:4}"
myarray[1]="${string:9:2}"
myarray[2]="${string:11:2}"
echo "${myarray[0]}"
echo "${myarray[1]}"
echo "${myarray[2]}"
Estou tentando renomear vários arquivos contendo datas. Eu quero dividir a data em ano, mês e dia e, em seguida, criar um novo nome de arquivo em uma árvore de diretório como ano / mês-ano / filename_yearmonthday.extension
Já consegui criar uma expressão sed para filtrar a data e gravá-la em três variáveis separadas. Gostaria agora de inserir os valores em uma matriz, onde [0] é ano, [1] é mês e [2] é dia. Eu tentei a seguinte declaração:
#!/bin/bash
for i in *
do
myarray=( $(echo ${i} | \
sed -n 's/.*\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\).*/ /p' ) )
done
mas o roteiro reclama Erro de sintaxe: "(" unexpected (expecting "done") na terceira linha que contém a expressão sed.
*** edit A posição da data continua mudando, então não posso simplesmente dividir por strings.
A partir de agora, eu nem tenho sucesso em algo assim:
#!/bin/bash
myarray=(1 2 3 4)
echo ${myarray[@]}
sempre me diz "Erro de sintaxe:" ("inesperado (esperando" feito ")" na linha que contém o array. *** endedit
Se eu fizer isso diretamente na linha de comando, está funcionando. Obrigado pela ajuda.
Se fosse eu, eu iria carregar o array assim:
#!/bin/bash
string="file_20160825_namegoeson"
myarray[0]="${string:5:4}"
myarray[1]="${string:9:2}"
myarray[2]="${string:11:2}"
echo "${myarray[0]}"
echo "${myarray[1]}"
echo "${myarray[2]}"