будет плохо, что название функции или сценария содержит dash` -` вместо подчеркивания `_`?

#!/bin/env python
import os
cmd1 = "sleep 50"
cmd2 = "xrandr --output VGA1 --gamma 1.28:1:1.28"   
os.system(cmd1)
os.system(cmd2)
2
18.11.2018, 01:07
3 ответа

Да, дефисы в именах функций в bash можно использовать.

Вот пример проекта, использующего имена функций с тире в них.

На самом деле, другие символы, которые могут показаться вам необычными, также возможны в именах функций. Вот другой пример сценария в том же проекте , который использует ::как часть имен функций, как своего рода пространство имен. (Заметьте, однако, что в последнем используются символы подчеркивания, а в первом — дефисы, так что согласованность здесь не так сильна...)

Как упомянул @choroba, пространство имен для имен функций и имен переменных является отдельным, на самом деле не существует ситуации, когда имя могло бы ссылаться на одно или другое, поэтому тот факт, что они имеют разные наборы разрешенных символов, не имеет значения. действительно создавать любые проблемы для имен, которые действительны только как одно, а не другое.

1
27.01.2020, 21:49

Имя функции оболочки POSIX не может содержать тире:

[A Name is] a word consisting solely of underscores, digits, and alphabetics from the portable character set. The first character of a name is not a digit.

zsh, bash, pdkshи fishпозволяют использовать тире в именах функций, но ksh93и dashне позволяют (и fishна самом деле не является оболочкой POSIX, чтобы начинать с ). Я думаю, что было бы разумно избегать тире в именах функций.

Переменные и функции не имеют общего пространства имен, а правила именования POSIX для имен переменных такие же, как и для имен функций оболочки POSIX, и я не знаю ни одной оболочки, которая допускает дефисы в именах переменных.

Скрипты могут иметь дефисы в своих именах, а также любые другие символы, кроме нулевого символа -и /, так как они являются именами файлов.

7
27.01.2020, 21:49

Использование тире плохо, если вы хотите быть переносимым, стандарт допускает только буквенно-цифровые символы и символы подчеркивания , поэтому тире могут работать не во всех оболочках:

$ dash -c 'foo-bar() { echo foo-bar; }; foo-bar'
dash: 1: Syntax error: Bad function name

(Busybox и ksh их тоже не принимают; Bash, Zsh и mksh подходят.)

Это не проблема, если вы знаете, что используете Bash.поэтому, если вам нравятся тире, вы можете использовать их в именах функций. Однако, если вы хотите избежать неправильного использования функции вместо имени переменной, обратите внимание, что, например. $foo-barи ${foo-bar}являются допустимым синтаксисом оболочки. Первый расширяет переменную $fooи добавляет строку -bar; второй расширяется до значения $fooили, если оно не установлено, заданного значения bar.

8
27.01.2020, 21:49

Теги

Похожие вопросы