Я записал бы
case ":$PATH:" in
*:$HOME/mydir:*) echo it is in the path;;
*) echo not there ;;
esac
Я пишу ": $PATH": гарантировать, что шаблон соответствует, если желаемый путь или сначала или в последний раз в Вашем $PATH.
Я думаю, что Вам не нужны никакие регулярные выражения здесь. Просто попытайтесь искать фиксированную строку с grep. Можно включить зафиксированное сопоставление строк с -F
переключатель.
Учитывая, что Ваша командная строка похожа
(filenames are produced here) | \
while read f ; \
do mdfind -name "$f" | grep -F "/$f" ; \
done
Используйте питание страницы справочника.;)
В странице справочника mdfind говорится:
-literal Force the provided query string to be taken as a literal query string, without interpretation.
Без той опции mdfind интерпретирует символы как "* ", "+" и" ()" как регулярное выражение.
Атрибут метаданных для имени файла kMDItemFSName
. Так, для нахождения файла с собственным именем:
mdfind -literal 'kMDItemFSName = "somefile.txt"'
Бонусная подсказка: можно также использовать mdls /path/to/somefile.txt
осмотреть метаданные файла
mdfind -literal 'kMDItemFSName == ..
но это столь медленно, что это не применимо. mdfind - имя возвращается почти сразу, - литерал занимает легко 30 секунд по запросу, который я попробовал.
– alecail
22.01.2013, 14:11