В двух словах рассматриваемое утверждение означает, как предложил PSkocik в комментарии, что с bar() {... } > foo
вам не нужно беспокоиться о перезаписи foo
до тех пор, пока ваша функция bar()
не начнет выполняться. То есть, просто запустить скрипт, который определяет bar
, недостаточно, чтобы перезаписать foo
, вам действительно нужно вызватьbar
:)
На практике это также означает, что вы можете перенаправлять с помощью переменных, > "$foo"
а не > foo
, потому что переменная не будет расширена/вычислена до вызова функции.
Подробное обсуждение этого и других деталей перенаправления функций можно найти здесь:http://www.linuxjournal.com/content/more-bash-redirections
Чтобы проверить, существует ли /some/path
либо как что-то, что может быть полностью разрешено, либо как неработающая символическая ссылка:
if [ -e /some/path ] || [ -h /some/path ]; then
echo '/some/path exists, possibly as a broken symbolic link'
fi
Тест -h
верен для символической ссылки, независимо от того, повреждена она или нет. Существует также -L
тест, который идентичен -h
тесту (исторические причины ).
Тесты -e
завершатся неудачей, если указанный путь со всеми разрешенными символическими ссылками не может быть найден. Вот почему нам, возможно, придется использовать -h
в отдельном тесте, если мы ожидаем, что компонент имени файла нашего пути является неработающей символической ссылкой.