для меня в ls - Unix синтаксис - PullRequest
0 голосов
/ 09 июля 2010

Что с этим не так?

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

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

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

Ответы [ 5 ]

4 голосов
/ 09 июля 2010

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

for file in [A-Z]??????
do
 echo $file
done
1 голос
/ 09 июля 2010

Когда вы используете обратный тик: "` "вместо одинарных кавычек" '", выходные данные программы между обратными кавычками будут использоваться как входные данные для оболочки, т.е.

for i in `ls | grep '^[A-Z]......$'`;do echo $i;done
0 голосов
/ 27 августа 2012

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

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

Обратите внимание, что имена файлов со встроенными пробелами и т.п. могут нарушить этот цикл.

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

for file in [A-Z]??????
do
 [[ -f "$file" ]] && echo $file
done
0 голосов
/ 09 июля 2010

Разве это не должны быть спины?

 for i in `ls | grep blahblahblah`; do echo $i; done
0 голосов
/ 09 июля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...