Что в этом плохого?для i в ls - синтаксис Unix
for i in 'ls | grep '^[A-Z]......$'
do
echo $i
done
Если я просто использовать команду ls | grep '^[A-Z]......$
я получаю файлы я хочу
Что мне не хватает?
Что в этом плохого?для i в ls - синтаксис Unix
for i in 'ls | grep '^[A-Z]......$'
do
echo $i
done
Если я просто использовать команду ls | grep '^[A-Z]......$
я получаю файлы я хочу
Что мне не хватает?
вы имеете в виду
for i in `ls | grep '^[A-Z]......$'`;do echo $i;done
? actully это разница между `и ', ограниченная внутри вашей оболочки, а не проблема с регулярным выражением или ОС.
Не должны ли быть обратными?
for i in `ls | grep blahblahblah`; do echo $i; done
При использовании Открывающей кавычки: «`»вместо одинарной кавычки«'»выход программы между кавычкой будет использоваться в качестве входных данных для оболочки, т.е.
for i in `ls | grep '^[A-Z]......$'`;do echo $i;done
в вещь, которая является «неправильной», заключается в том, что нет необходимости использовать внешнюю команду ls
для перечисления ваших файлов и grep вашего шаблона. Просто используйте оболочку.
for file in [A-Z]??????
do
echo $file
done
grep
является ненужным, поскольку оболочка уже делает расширение имени файла:
for file in $(ls [A-Z]??????)
do
echo $file
done
Обратите внимание, что имена файлов с встроенными пространствами и похожи бы разорвать эту петлю.
ls
можно избежать слишком фиксации прежнего вопроса, но тест нужно затем, чтобы добавить, чтобы предотвратить обработку несуществующий файл, если файл не соответствует шаблону:
for file in [A-Z]??????
do
[[ -f "$file" ]] && echo $file
done
+1 вместо обратных кавычек вы можете также используйте '$ (....)' для подстановки команд. См. Http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html –
Я все еще не могу заставить это работать? – matt123
нет необходимости использовать внешние команды. см. мой ответ – ghostdog74