2010-07-09 6 views
0

Что в этом плохого?для i в ls - синтаксис Unix

for i in 'ls | grep '^[A-Z]......$' 
do 
echo $i 
done 

Если я просто использовать команду ls | grep '^[A-Z]......$ я получаю файлы я хочу

Что мне не хватает?

ответ

0

вы имеете в виду

for i in `ls | grep '^[A-Z]......$'`;do echo $i;done 

? actully это разница между `и ', ограниченная внутри вашей оболочки, а не проблема с регулярным выражением или ОС.

+0

+1 вместо обратных кавычек вы можете также используйте '$ (....)' для подстановки команд. См. Http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html –

+0

Я все еще не могу заставить это работать? – matt123

+1

нет необходимости использовать внешние команды. см. мой ответ – ghostdog74

0

Не должны ли быть обратными?

for i in `ls | grep blahblahblah`; do echo $i; done 
1

При использовании Открывающей кавычки: «`»вместо одинарной кавычки«'»выход программы между кавычкой будет использоваться в качестве входных данных для оболочки, т.е.

for i in `ls | grep '^[A-Z]......$'`;do echo $i;done 
4

в вещь, которая является «неправильной», заключается в том, что нет необходимости использовать внешнюю команду ls для перечисления ваших файлов и grep вашего шаблона. Просто используйте оболочку.

for file in [A-Z]?????? 
do 
echo $file 
done 
0

grep является ненужным, поскольку оболочка уже делает расширение имени файла:

for file in $(ls [A-Z]??????) 
do 
    echo $file 
done 

Обратите внимание, что имена файлов с встроенными пространствами и похожи бы разорвать эту петлю.

ls можно избежать слишком фиксации прежнего вопроса, но тест нужно затем, чтобы добавить, чтобы предотвратить обработку несуществующий файл, если файл не соответствует шаблону:

for file in [A-Z]?????? 
do 
[[ -f "$file" ]] && echo $file 
done 
Смежные вопросы