Lista de caracteres iniciais aceitáveis para uma variável bash

0

Quais são os caracteres aceitáveis em uma variável bash?

Alguém pode me indicar o lugar na página man bash que descreve o nome aceitável para uma variável bash?

Eu olhei e criei muitas informações (consulte as edições das perguntas), mas não uma resposta clara.

    
por datUser 08.03.2018 / 00:02

1 resposta

7

Você pode atribuir valores a variáveis (com var=value ). Existe uma distinção perfeita entre um parâmetro e um variável :

A parameter is an entity that stores values. It can be a name, a number, or one of the special characters listed below. A variable is a parameter denoted by a name.

e um nome é definido como :

name A word consisting solely of letters, numbers, and underscores, and beginning with a letter or underscore. Names are used as shell variable and function names. Also referred to as an identifier.

(Essa é a definição no manual do Bash, POSIX provavelmente tem algo similar.)

Portanto, qualquer coisa que corresponda ao regex [a-zA-Z_][a-zA-Z_0-9]* (assumindo intervalos de caracteres ASCII) é um nome válido para uma variável. Caracteres Unicode e pontuação não funcionam.

Esse é basicamente o conjunto de caracteres suportados em nomes de variáveis na maioria das linguagens de programação, embora alguns também suportem Unicode. As palavras que começam com dígitos são tomadas como números (note que coisas como 0xabcd e 123e3 são frequentemente números válidos), e o traço é geralmente considerado como o operador menos, então a-b é uma operação aritmética simples de duas variáveis, não uma variável. E assim por diante.

Os parâmetros que não são desse formato são os parâmetros posicionais numerados (argumentos de script / função, atribuíveis com set ) e o parâmetros especiais . Observe que _ (um único sublinhado) é um dos últimos e, embora você possa atribuir a ele sem um erro, não é muito útil, pois é redefinido imediatamente.

Estes são bons:

$ a123=foo __=bar
$ echo $a123 $__
foo bar

mas:

$ _=foo echo bar >/dev/null 
$ echo $_
bar

Quanto aos maiúsculos, há uma lista das variáveis que são especiais para Bash ou outros shells Bourne-ish (ignore as variáveis readline, eles não estão relacionados aqui). Todos parecem começar com uma letra maiúscula, exceto que há histchars em letras minúsculas (!). Felizmente, só importa se a expansão do histórico estiver ativada.

    
por 08.03.2018 / 00:38