Я пытаюсь переместить некоторые файлы на основе шаблона поиска, используя bash, но получаю сообщение об ошибке. Вот формат заимствованного сценария, который я использовал, и сообщение об ошибке. Спасибо!
#!/bin/bash
firstdir=dir1
seconddir=dir2
for i in 'grep -l matchpattern $firstdir/*'; do
mv $i $seconddir
echo $i
done
Сообщение об ошибке:
mv: invalid option -- 'l'
Try `mv --help' for more information.
grep -l problem $firstdir/*
PS Я довольно долго искал ответ, но ничего не получил.
При записи сценариев, если у Вас есть ошибка, Вам нужно к echo
Ваши переменные для понимания то, что происходит. Это - первый шаг в отладке. Если бы Вы сделали так, Вы видели бы, что эти grep
команда не выполняется и вместо этого сохраняется как $i
:
$ for i in 'grep -l matchpattern $firstdir/*'; do
echo "i is: $i";
done
i is: grep -l matchpattern $firstdir/*
для передачи результатов команды, необходимо использовать замена команды . Это или `command`
или, лучше, $(command)
. Так, что Вы хотели сделать, был:
for i in $(grep -l matchpattern "$firstdir"/*); do
mv "$i" "$seconddir"
done
Необходимо изменить кавычки вокруг эти grep
команда для обратные галочки :
for i in `grep -l matchpattern "$firstdir"/*`; do
Или принимают новый стиль $()
:
for i in $(grep -l matchpattern "$firstdir"/*); do
Источник: , Каково различие между $ (материал) и 'материалом'?