Primeiro, $(command_string)
daria o erro "bash: command_string: command not found" como uma substituição de comando. Uma substituição de comando executaria o comando dentro dos parênteses e substituiria a coisa toda pela saída desse comando.
Em segundo lugar, mesmo que você tenha usado apenas $command_string
para executar seu comando, você ainda adiciona aspas simples aos nomes dos arquivos. Os nomes dos arquivos não têm citações únicas.
Em geral, evite colocar comandos em variáveis. Consulte " Como podemos executar um comando armazenado em uma variável? ".
Em vez disso, talvez algo assim:
#!/bin/bash
for pathname in tracks/*; do
if [[ "$pathname" =~ ([0-9]+)[[:blank:]]* ]]; then
newpathname="${pathname%/*}/${BASH_REMATCH[1]}"
printf 'Would move "%s" to "%s"\n' "$pathname" "$newpathname"
# mv -i "$pathname" "$newpathname"
break
fi
done
Esse loop faz (eu acho) o que você está tentando fazer. Eu comentei o bit que realmente renomeia o arquivo para segurança.