Ваш сценарий попытается переместить файл и файл с именем «echo» в файл и направить вывод mv
в sed
.
Все, что вам нужно, - это запустить этот echo | sed
в подстановке команд, которую fi sh обозначает ()
:
for f in *.pdf
mv $f (echo $f | sed 's/\( \)\([0-9]\)/-\2/')
end
Очевидно, что имя цели имеет пробелы и должно быть заключено в кавычки, чтобы его можно было обработать командой mv.
Это не очевидно, потому что не нужно цитировать. Fi sh не выполняет разбиение слов, как bash. Имя файла задается один раз, и тогда $f
всегда будет давать имя файла в качестве одного аргумента.
Цитирование как "$f"
было бы совершенно излишним.
При подстановке команд он разделяет их только для новой строки , а не пробелов, поэтому, если у вас нет имени файла с новой строкой ( очень маловероятно), у вас тоже не будет проблем.
Если вы нужно ли было использовать string collect
как
for f in *.pdf
mv $f (echo $f | sed 's/\( \)\([0-9]\)/-\2/' | string collect)
end
, чтобы подстановка команды приводила к одному аргументу.