"${blah}"
и "$blah"
представляют собой переносимый синтаксис оболочки: они работают во всех оболочках, совместимых с POSIX, а также в традиционных оболочках Bourne. . POSIX также требует других функций расширения переменных:
${VAR#PREFIX}
, ${VAR##PREFIX}
, ${VAR%SUFFIX }
и ${VAR%%SUFFIX}
.${VAR-DEFAULT}
, ${VAR=DEFAULT}
, ${VAR+FALLBACK}
и ] ${VAR?MESSAGE}
, а также неустановленные или пустые варианты с :-
, :=
, :+
и :?
.${#VAR}
.Во всех случаях помните, что результат $…
подвергается расщеплению пробелами (точнее, разбиению на символы $IFS
) и расширению подстановочных знаков (подстановке), если только он не находится в двойном кавычки (или несколько других контекстов, которые не позволяют использовать несколько слов).
Вы можете посмотреть, что существует в POSIX, прочитав спецификацию. Современные версии POSIX идентичны Базовым спецификациям Open Group(без дополнительных компонентов). Старые версии являются подмножеством Single Unix v2.
Unix-подобные системы без оболочки POSIX в настоящее время крайне редки. /bin/sh
является оболочкой Bourne, отличной от POSIX, в нескольких системах, особенно в Solaris, но доступна оболочка POSIX ( /usr/xpg4/bin/sh
в Solaris и у вас должно быть /usr/xpg4/bin
перед /usr/bin
в вашем PATH). Если вам нужна совместимость с оболочками Bourne, проверьте man-страницы интересующих вас систем, так как существует множество версий sh с немного отличающимися наборами функций. Свен Масчек поддерживает страницу с большим количеством информации.
Без «действия» (, такого как -print
), find
будет распечатывать каждый посещаемый файл. Именно из-за этого find -L. ( -name dest ) -prune -o -name "*.out"
по-прежнему отображаются удаляемые файлы. find
должен просмотреть файл, прежде чем он сможет оценить предоставленные вами условия.
Добавление действия -print
в конец команды find
должно помочь.
find -L. -name dest -prune -o -name "*.out" -print