Почему bash запрещает функцию оболочки с именем `df`? - PullRequest
1 голос
/ 28 сентября 2019

Я использую GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu).

У меня есть следующие строки в одном из моих файлов запуска:

df() {
        printf "Hello, world!\n"
}

При получении этого файла я получаю эту ошибку:

-bash: sh/interactive.sh: line 109: syntax error near unexpected token `('
-bash: sh/interactive.sh: line 109: `df() {'

Однако, если я изменю имя функции с df на dir или ef или anything_else, я не получу ошибку.

Я предполагаю, что df является каким-то зарезервированным словом, но когда я проверил этот список зарезервированных слов в bash , я не смог его найти.(И я не думаю, что так оно и должно быть!)

Итак, кто-нибудь может пролить свет на это?Почему bash запрещает мне определять функцию оболочки с именем df?

1 Ответ

4 голосов
/ 28 сентября 2019

Это происходит потому, что вы ранее определили псевдоним для этого имени.Псевдонимы - это простые замены строкового префикса, и поэтому они мешают определениям функций:

$ alias foo='foo --bar'
$ foo() { echo "Hello"; }
bash: syntax error near unexpected token `('

Это эквивалентно (и завершается с той же ошибкой, что и)

$ foo --bar() { echo "Hello"; }
bash: syntax error near unexpected token `('

Чтобы объявить функцию симя, которое было переопределено псевдонимом, вы можете использовать ключевое слово function:

$ alias foo='foo --bar'
$ function foo() { echo "Hello, $1"; }
$ foo
Hello, --bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...