Прежде всего, $(command_string)
выдаст ошибку «bash :команда _строка :команда не найдена» как подстановка команды.Подстановка команды запустит команду в скобках и заменит все это выводом этой команды.
Во-вторых, даже если вы использовали только $command_string
для выполнения своей команды, вы все равно добавляете одинарные кавычки к именам файлов. В именах файлов нет одинарных кавычек.
В общем, просто избегайте помещать команды в переменные. См. «Как мы можем запустить команду, хранящуюся в переменной? ».
Вместо этого может быть что-то вроде этого:
#!/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
Этот цикл делает (Я думаю )то, что вы пытаетесь сделать. Я закомментировал часть, которая фактически переименовывает файл для безопасности.
Если вы можете быть уверены, что первый символ является буквой (, вы также не проверяли это):
grep '^[^#].*[0-9]' file.txt