bash - manual de referência, opções, exemplos de comandos


NOME

bash - GNU Bourne-Again SHell

SINOPSE

bash [options] [command_string | file]

DIREITO AUTORAL

Bash é Copyright (C) 1989-2020 da Free Software Foundation, Inc.

DESCRIÇÃO

Bash é um interpretador de linguagem de comando compatível com sh que executa comandos lidos da entrada padrão ou de um arquivo. Bash também incorpora recursos úteis dos shells Korn e C (ksh e csh ).

Bash destina-se a ser uma implementação compatível com a parte Shell e Utilitários da especificação IEEE POSIX (Padrão IEEE 1003.1). Bash pode ser configurado para ser compatível com POSIX por padrão.

OPÇÕES

Todas as opções de shell de um único caractere documentadas na descrição do comando interno set, incluindo -o, podem ser usadas como opções quando o shell é invocado. Além disso, bash interpreta as seguintes opções quando é invocado:

-c

Se a opção -c estiver presente, os comandos serão lidos a partir do primeiro argumento não opcional command_string. Se houver argumentos após command_string, o primeiro argumento será atribuído a $0 e quaisquer argumentos restantes serão atribuídos aos parâmetros posicionais. A atribuição para $0 define o nome do shell, que é usado em mensagens de aviso e erro.

-i

Se a opção -i estiver presente, o shell é interativo.

-l

Faça bash agir como se tivesse sido invocado como um shell de login (veja INVOCATION abaixo).

-r

Se a opção -r estiver presente, o shell se tornará restrito (consulte SHELL RESTRITO abaixo).

-s

Se a opção -s estiver presente, ou se nenhum argumento permanecer após o processamento da opção, os comandos serão lidos a partir da entrada padrão. Esta opção permite que os parâmetros posicionais sejam definidos ao invocar um shell interativo ou ao ler a entrada por meio de um canal.

-D

Uma lista de todas as strings entre aspas precedidas por $ é impressa na saída padrão. Estas são as strings que estão sujeitas à tradução do idioma quando a localidade atual não é C ou POSIX. Isso implica na opção -n; nenhum comando será executado.

[-+]O [shopt_option]

shopt_option é uma das opções de shell aceitas pelo shopt integrado (consulte COMANDOS CONSTRUÍDOS SHELL abaixo). Se shopt_option estiver presente, -O define o valor dessa opção; +O desativa. Se shopt_option não for fornecido, os nomes e valores das opções de shell aceitas por shopt serão impressos na saída padrão. Se a opção de chamada for +O, a saída será exibida em um formato que pode ser reutilizado como entrada.

--

Um -- sinaliza o fim das opções e desativa o processamento adicional de opções. Quaisquer argumentos após -- são tratados como nomes de arquivos e argumentos. Um argumento de - é equivalente a --.

Bash também interpreta várias opções de vários caracteres. Essas opções devem aparecer na linha de comando antes das opções de caractere único para serem reconhecidas.

--debugger

Faça com que o perfil do depurador seja executado antes do início do shell. Ativa o modo de depuração estendida (consulte a descrição da opção extdebug para o shopt embutido abaixo).

--dump-po-strings

Equivalente a -D, mas a saída está no formato de arquivo GNU gettext po (objeto portátil).

--dump-strings

Equivalente a -D.

--help

Exiba uma mensagem de uso na saída padrão e saia com sucesso.

--init-file file
--rcfile file

Execute comandos do arquivo em vez do arquivo de inicialização pessoal padrão ~/.bashrc se o shell for interativo (consulte INVOCATION abaixo).

--login

Equivalente a -l.

--noediting

Não use a biblioteca GNU readline para ler linhas de comando quando o shell é interativo.

--noprofile

Não leia o arquivo de inicialização de todo o sistema  /etc/profile  ou qualquer um dos arquivos de inicialização pessoais ~/.bash_profile, ~/.bash_login , ou ~/.profile. Por padrão, o bash lê esses arquivos quando é invocado como um shell de login (consulte INVOCATION abaixo).

--norc

Não leia e execute o arquivo de inicialização pessoal ~/.bashrc se o shell for interativo. Esta opção está ativada por padrão se o shell for invocado como sh.

--posix

Altere o comportamento de bash onde a operação padrão difere do padrão POSIX para corresponder ao padrão (modo posix). Consulte VEJA TAMBÉM abaixo para obter uma referência a um documento que detalha como o modo posix afeta o comportamento do bash.

--restricted

O shell fica restrito (consulte SHELL RESTRITO abaixo).

--verbose

Equivalente a -v.

--version

Mostre informações de versão para esta instância de bash na saída padrão e saia com sucesso.

ARGUMENTOS

Se os argumentos permanecerem após o processamento da opção e nem a opção -c nem a opção -s tiverem sido fornecidas, o primeiro argumento será considerado o nome de um arquivo contendo comandos shell . Se bash for invocado dessa maneira, $0 será definido como o nome do arquivo e os parâmetros posicionais serão definidos como os argumentos restantes. Bash lê e executa comandos deste arquivo, então sai. O status de saída do Bash é o status de saída do último comando executado no script. Se nenhum comando for executado, o status de saída é 0. Primeiro é feita uma tentativa de abrir o arquivo no diretório atual e, se nenhum arquivo for encontrado, o shell pesquisará os diretórios em PATH para o roteiro.

INVOCAÇÃO

Um shell de login é aquele cujo primeiro caractere do argumento zero é - ou começa com a opção --login.

Um shell interativo é iniciado sem argumentos sem opção (a menos que -s seja especificado) e sem a opção -c cuja entrada padrão e erro estão ambos conectados a terminais (conforme determinado por isatty(3)) ou um iniciado com a opção -i.

PS1 está definido e $- inclui i se bash for interativo, permitindo que um shell script ou um arquivo de inicialização testar este estado.

Os parágrafos a seguir descrevem como o bash executa seus arquivos de inicialização. Se algum dos arquivos existir, mas não puder ser lido, o bash reportará um erro. Tiles são expandidos em nomes de arquivos conforme descrito abaixo em Expansão de Tiles na seção EXPANSÃO.

Quando bash é invocado como um shell de login interativo, ou como um shell não interativo com a opção --login, ele primeiro lê e executa comandos do arquivo /etc/profile, se esse arquivo existir. Depois de ler esse arquivo, ele procura por ~/.bash_profile, ~/.bash_login e ~/.profile, nessa ordem, e lê e executa comandos do primeiro que existe e é legível. A opção --noprofile pode ser usada quando o shell é iniciado para inibir esse comportamento.

Quando um shell de login interativo sai, ou um shell de login não interativo executa o comando interno exit, bash lê e executa comandos do arquivo ~/.bash_logout, se existir.

Quando um shell interativo que não é um shell de login é iniciado, bash lê e executa comandos de ~/.bashrc, se esse arquivo existir. Isso pode ser inibido usando a opção --norc. A opção --rcfile arquivo forçará bash a ler e executar comandos de arquivo em vez de ~ /.bashrc.

Quando bash é iniciado de forma não interativa, para executar um shell script, por exemplo, ele procura a variável BASH_ENV no ambiente, expande seu valor se ela aparecer lá e usa o valor expandido como o nome de um arquivo para ler e executar. Bash se comporta como se o seguinte comando fosse executado:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

mas o valor da variável PATH não é usado para procurar o nome do arquivo.

Se bash for invocado com o nome sh, ele tentará imitar o comportamento de inicialização de versões históricas de sh o mais próximo possível, em conformidade com o padrão POSIX também. Quando invocado como um shell de login interativo, ou um shell não interativo com a opção --login, ele primeiro tenta ler e executar comandos de /etc/profile e <~/.profile, nessa ordem. A opção --noprofile pode ser usada para inibir esse comportamento. Quando invocado como um shell interativo com o nome sh, bash procura a variável ENV, expande seu valor se estiver definido e usa o valor expandido como o nome de um arquivo para ler e executar. Como um shell chamado como sh não tenta ler e executar comandos de nenhum outro arquivo de inicialização, a opção --rcfile não tem efeito. Um shell não interativo chamado com o nome sh não tenta ler nenhum outro arquivo de inicialização. Quando invocado como sh, bash entra no modo posix depois que os arquivos de inicialização são lidos.

Quando o bash é iniciado no modo posix, como na opção de linha de comando --posix, ele segue o padrão POSIX para arquivos de inicialização. Nesse modo, os shells interativos expandem a variável ENV e os comandos são lidos e executados a partir do arquivo cujo nome é o valor expandido. Nenhum outro arquivo de inicialização é lido.

Bash tenta determinar quando está sendo executado com sua entrada padrão conectada a uma conexão de rede, como quando executado pelo daemon shell remoto, geralmente rshd, ou o daemon shell seguro sshd. Se bash determinar que está sendo executado dessa maneira, ele lê e executa comandos de ~/.bashrc, se esse arquivo existir e for legível. Ele não fará isso se invocado como sh. A opção --norc pode ser usada para inibir esse comportamento, e a opção --rcfile pode ser usada para forçar a leitura de outro arquivo, mas nem rshd nem sshd geralmente invocam o shell com essas opções ou permitem que elas sejam especificadas.

Se o shell for iniciado com o id do usuário efetivo (grupo) diferente do id do usuário real (grupo) e a opção -p não for fornecida, nenhum arquivo de inicialização será lido, as funções do shell não serão herdadas do ambiente, as variáveis SHELLOPTS, BASHOPTS, CDPATH e GLOBIGNORE, se aparecerem no ambiente , são ignorados e o ID do usuário efetivo é definido como o ID do usuário real. Se a opção -p for fornecida na chamada, o comportamento de inicialização é o mesmo, mas o ID do usuário efetivo não é reconfigurado.

DEFINIÇÕES

As definições a seguir são usadas no restante deste documento.

blank

Um espaço ou tabulação.

word

Uma sequência de caracteres considerada como uma única unidade pelo shell. Também conhecido como token.

name

Uma palavra que consiste apenas em caracteres alfanuméricos e sublinhados e começa com um caractere alfabético ou um sublinhado. Também chamado de identificador.

metacharacter

Um caractere que, quando não citado, separa as palavras. Um dos seguintes:

| & ; ( ) < > space tab newline
control operator

Um token que executa uma função de controle. É um dos seguintes símbolos:

|| & && ; ;; ;& ;;& ( ) | |& <newline>

PALAVRAS RESERVADAS

Palavras reservadas são palavras que têm um significado especial para o shell. As seguintes palavras são reconhecidas como reservadas quando não estão entre aspas e a primeira palavra de um comando (consulte SHELL GRAMMAR abaixo), a terceira palavra de um caso ou selecionar< (apenas in é válido) ou a terceira palavra de um comando for (apenas in e do são válidos):

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

SHELL GRAMÁTICA

Comandos Simples

Um comando simples é uma sequência de atribuições de variáveis opcionais seguidas por palavras e redirecionamentos separados por branco e finalizado por um operador de controle. A primeira palavra especifica o comando a ser executado e é passada como argumento zero. As palavras restantes são passadas como argumentos para o comando invocado.

O valor de retorno de um comando simples é seu status de saída, ou 128+n  se o comando for finalizado pelo sinal n.

Oleodutos

Um pipeline é uma sequência de um ou mais comandos separados por um dos operadores de controle | ou |&. O formato de um pipeline é:

[time [-p]] [ ! ] command [ [|⎪|&] command2 ... ]

A saída padrão do comando é conectada por meio de um canal à entrada padrão do comando2. Esta conexão é executada antes de qualquer redirecionamento especificado pelo comando (consulte REDIRECTION abaixo). Se |& for usado, o erro padrão do comando, além de sua saída padrão, é conectado à entrada padrão do comando2 por meio do cano; é uma abreviação de 2>&1 |. Esse redirecionamento implícito do erro padrão para a saída padrão é executado após qualquer redirecionamento especificado pelo comando.

O status de retorno de um pipeline é o status de saída do último comando, a menos que a opção pipefail esteja habilitada. Se pipefail estiver ativado, o status de retorno do pipeline será o valor do último comando (mais à direita) a sair com um status diferente de zero ou zero se todos os comandos forem encerrados com êxito. Se a palavra reservada ! preceder um pipeline, o status de saída desse pipeline é a negação lógica do status de saída conforme descrito acima. O shell espera que todos os comandos no pipeline terminem antes de retornar um valor.

Se a palavra reservada tempo preceder um pipeline, o tempo decorrido, bem como o tempo do usuário e do sistema consumido por sua execução, serão relatados quando o pipeline terminar. A opção -p altera o formato de saída para aquele especificado pelo POSIX. Quando o shell está no modo posix, ele não reconhece tempo como uma palavra reservada se o próximo token começar com `-'. A variável TIMEFORMAT pode ser definida como uma string de formato que especifica como as informações de tempo devem ser exibidas; veja a descrição de TIMEFORMAT em Variáveis de shell abaixo.

Quando o shell está no modo posix, time pode ser seguido por uma nova linha. Nesse caso, o shell exibe o tempo total do usuário e do sistema consumido pelo shell e seus filhos. A variável TIMEFORMAT pode ser usada para especificar o formato da informação de tempo.

Cada comando em um pipeline é executado como um processo separado (ou seja, em um subshell). Consulte AMBIENTE DE EXECUÇÃO DE COMANDO para obter uma descrição de um ambiente de subshell. Se a opção lastpipe estiver habilitada usando o shopt embutido (veja a descrição de shopt abaixo), o último elemento de um pipeline pode ser executado por o processo de casca.

Listas

Uma lista é uma sequência de um ou mais pipelines separados por um dos operadores ;, &, &&, ou ||, e opcionalmente encerrado por um de ;, & ou <newline>.

Desses operadores de lista, && e || têm precedência igual, seguidos por ; e &, que têm igual precedência.

Uma sequência de uma ou mais novas linhas pode aparecer em uma lista em vez de um ponto e vírgula para delimitar os comandos.

Se um comando for encerrado pelo operador de controle &, o shell executará o comando em background em um subshell. O shell não espera a conclusão do comando e o status de retorno é 0. Esses são chamados de comandos assíncronos. Comandos separados por ; são executados sequencialmente; o shell espera que cada comando termine por sua vez. O status de retorno é o status de saída do último comando executado.

As listas AND e OR são sequências de um ou mais pipelines separados pelos operadores de controle && e ||, respectivamente. As listas AND e OR são executadas com associatividade à esquerda. Uma lista AND tem a forma

command1 && command2

comando2 é executado se, e somente se, comando1 retorna um status de saída de zero (sucesso).

Uma lista OU tem a forma

command1 || command2

comando2 é executado se, e somente se, comando1 retornar um status de saída diferente de zero. O status de retorno das listas AND e OR é o status de saída do último comando executado na lista.

Comandos Compostos

Um comando composto é um dos seguintes. Na maioria dos casos, uma lista na descrição de um comando pode ser separada do restante do comando por uma ou mais novas linhas e pode ser seguida por uma nova linha no lugar de um ponto e vírgula.

(list)

list é executado em um ambiente de subshell (consulte AMBIENTE DE EXECUÇÃO DE COMANDO abaixo). Atribuições de variáveis e comandos internos que afetam o ambiente do shell não permanecem em vigor após a conclusão do comando. O status de retorno é o status de saída da lista

{ list; }

list é simplesmente executado no ambiente shell atual. lista deve terminar com uma nova linha ou ponto e vírgula. Isso é conhecido como comando de grupo. O status de retorno é o status de saída da lista. Observe que, ao contrário dos metacaracteres ( e ), { e } são palavras reservadas e deve ocorrer onde uma palavra reservada pode ser reconhecida. Como eles não causam quebra de palavra, eles devem ser separados da lista por um espaço em branco ou outro metacaractere do shell.

((expression))

A expressão é avaliada de acordo com as regras descritas abaixo em AVALIAÇÃO ARITMÉTICA. Se o valor da expressão for diferente de zero, o status de retorno será 0; caso contrário, o status de retorno é 1. Isso é exatamente equivalente a let "expression".

[[ expression ]]

Retorna um status de 0 ou 1, dependendo da avaliação da expressão condicional expressão. As expressões são compostas pelas primárias descritas abaixo em EXPRESSÕES CONDICIONAIS. A divisão de palavras e a expansão do nome do caminho não são executadas nas palavras entre [[ e ]]; expansão de til, expansão de parâmetro e variável, expansão aritmética, substituição de comando, substituição de processo e remoção de citação são executadas. Operadores condicionais como -f devem ser colocados sem aspas para serem reconhecidos como primários.

Quando usados com [[, os operadores < e > classificam lexicograficamente usando a localidade atual.

Quando os operadores == e != são usados, a string à direita do operador é considerada um padrão e correspondida de acordo com as regras descritas abaixo em Padrão Correspondente, como se a opção de shell extglob estivesse ativada. O operador = é equivalente a ==. Se a opção de shell nocasematch estiver habilitada, a correspondência será executada sem levar em conta a capitalização dos caracteres alfabéticos. O valor de retorno é 0 se a string corresponder (==) ou não (!=) ao padrão e 1 caso contrário. Qualquer parte do padrão pode ser citada para forçar a parte citada a ser correspondida como uma string.

Um operador binário adicional, =~, está disponível, com a mesma precedência de == e !=. Quando é usado, a string à direita do operador é considerada uma expressão regular estendida POSIX e correspondida de acordo (usando as interfaces POSIX regcomp e regexec geralmente descritas em regex(3)). O valor de retorno é 0 se a string corresponder ao padrão e 1 caso contrário. Se a expressão regular estiver sintaticamente incorreta, o valor de retorno da expressão condicional será 2. Se a opção de shell nocasematch estiver habilitada, a correspondência será executada sem levar em conta as maiúsculas e minúsculas dos caracteres alfabéticos. Qualquer parte do padrão pode ser citada para forçar a parte citada a ser correspondida como uma string. As expressões entre colchetes em expressões regulares devem ser tratadas com cuidado, pois as aspas normais perdem seus significados entre colchetes. Se o padrão for armazenado em uma variável shell, colocar aspas na expansão da variável força todo o padrão a ser correspondido como uma string.

O padrão corresponderá se corresponder a qualquer parte da string. Ancore o padrão usando os operadores de expressão regular ^ e $ para forçá-lo a corresponder à string inteira. A variável de array BASH_REMATCH registra quais partes da string correspondem ao padrão. O elemento de BASH_REMATCH com índice 0 contém a parte da string correspondente à expressão regular inteira. Substrings correspondidas por subexpressões entre parênteses dentro da expressão regular são salvas nos índices BASH_REMATCH restantes. O elemento de BASH_REMATCH com índice n é a parte da string correspondente à nésima subexpressão entre parênteses.

As expressões podem ser combinadas usando os seguintes operadores, listados em ordem decrescente de precedência:

( expression )

Retorna o valor da expressão. Isso pode ser usado para substituir a precedência normal dos operadores.

! expression

Verdadeiro se expressão for falso.

expression1 && expression2

Verdadeiro se expressão1 e expressão2 forem verdadeiras.

expression1 || expression2

Verdadeiro se expressão1 ou expressão2 for verdadeiro.

Os operadores && e || não avaliam expressão2 se o valor de expressão1 for suficiente para determinar o valor de retorno de toda a expressão condicional.

for name [ [ in [ word ... ] ] ; ] do list ; done

A lista de palavras após in é expandida, gerando uma lista de itens. A variável nome é definida para cada elemento desta lista por vez, e lista é executada a cada vez. Se a in palavra for omitida, o comando for executa lista uma vez para cada parâmetro posicional definido (consulte PARÂMETROS abaixo). O status de retorno é o status de saída do último comando executado. Se a expansão dos itens após in resultar em uma lista vazia, nenhum comando será executado e o status de retorno será 0.

for (( expr1 ; expr2 ; expr3 )) ; do list ; done

Primeiro, a expressão aritmética expr1 é avaliada de acordo com as regras descritas abaixo em AVALIAÇÃO ARITMÉTICA. A expressão aritmética expr2 é avaliada repetidamente até ser avaliada como zero. Cada vez que expr2 avalia para um valor diferente de zero, list é executado e a expressão aritmética expr3 é avaliada. Se alguma expressão for omitida, ela se comporta como se fosse avaliada como 1. O valor de retorno é o status de saída do último comando na lista que é executado, ou false se alguma das expressões for inválida.

select name [ in word ] ; do list ; done

A lista de palavras após in é expandida, gerando uma lista de itens. O conjunto de palavras expandidas é impresso no erro padrão, cada uma precedida por um número. Se a in palavra for omitida, os parâmetros posicionais serão impressos (consulte PARÂMETROS abaixo). O prompt PS3 é então exibido e uma linha lida da entrada padrão. Se a linha consistir em um número correspondente a uma das palavras exibidas, o valor de nome será definido para essa palavra. Se a linha estiver vazia, as palavras e o prompt serão exibidos novamente. Se o EOF for lido, o comando será concluído. Qualquer outro valor lido faz com que nome seja definido como nulo. A linha lida é salva na variável REPLY. A lista é executada após cada seleção até que um comando break seja executado. O status de saída de selecionar é o status de saída do último comando executado na lista, ou zero se nenhum comando foi executado.

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

Um comando case primeiro expande palavra e tenta combiná-la com cada padrão por vez, usando as regras de correspondência descritas em Correspondência de padrão abaixo. A palavra é expandida usando expansão de til, expansão de parâmetro e variável, expansão aritmética, substituição de comando, substituição de processo e remoção de citação. Cada padrão examinado é expandido usando expansão de til, expansão de parâmetro e variável, expansão aritmética, substituição de comando e substituição de processo. Se a opção de shell nocasematch estiver habilitada, a correspondência será executada sem levar em conta a capitalização dos caracteres alfabéticos. Quando uma correspondência é encontrada, a lista correspondente é executada. Se o operador ;; for usado, nenhuma correspondência subsequente será tentada após a primeira correspondência de padrão. Usar ;& no lugar de ;; faz com que a execução continue com a lista associada ao próximo conjunto de padrões. Usar ;;& no lugar de ;; faz com que o shell teste a próxima lista de padrões na instrução, se houver, e execute qualquer lista associada em uma correspondência bem-sucedida, continuando a execução da instrução case como se a lista de padrões não tivesse correspondido. O status de saída é zero se nenhum padrão corresponder. Caso contrário, é o status de saída do último comando executado na lista.

if list; then list; [ elif list; then list; ] ... [ else list; ] fi

A if lista é executada. Se seu status de saída for zero, a então lista é executada. Caso contrário, cada elif lista é executada por vez e, se seu status de saída for zero, a então lista correspondente é executado e o comando é concluído. Caso contrário, a else lista é executada, se presente. O status de saída é o status de saída do último comando executado ou zero se nenhuma condição testada for verdadeira.

while list-1; do list-2; done
until list-1; do list-2; done

O comando while executa continuamente a lista list-2 desde que o último comando na lista list-1 retorne um status de saída de zero. O comando until é idêntico ao comando while, exceto que o teste é negado: list-2 é executado enquanto o último comando em list-1 retorna um status de saída diferente de zero. O status de saída dos comandos while e until é o status de saída do último comando executado em list-2, ou zero se nenhum foi executado .

Coprocessos

Um coprocess é um comando shell precedido pela palavra reservada coproc. Um coprocesso é executado de forma assíncrona em um subshell, como se o comando tivesse sido encerrado com o operador de controle &, com um pipe bidirecional estabelecido entre o shell de execução e o coprocesso.

O formato para um coprocesso é:

coproc [NAME] command [redirections]

Isso cria um coprocesso chamado NAME. Se NAME não for fornecido, o nome padrão é COPROC. NAME não deve ser fornecido se command for um comando simples (veja acima); caso contrário, é interpretado como a primeira palavra do comando simples. Quando o coprocesso é executado, o shell cria uma variável de array (consulte Arrays abaixo) chamada NAME no contexto do shell em execução. A saída padrão do comando é conectada por meio de um canal a um descritor de arquivo no shell de execução e esse descritor de arquivo é atribuído a NAME[0]. A entrada padrão do comando é conectada por meio de um pipe a um descritor de arquivo no shell de execução, e esse descritor de arquivo é atribuído a NAME[1]. Este canal é estabelecido antes de qualquer redirecionamento especificado pelo comando (consulte REDIRECTION abaixo). Os descritores de arquivo podem ser utilizados como argumentos para comandos shell e redirecionamentos usando expansões de palavras padrão. Além daqueles criados para executar substituições de comandos e processos, os descritores de arquivo não estão disponíveis em subshells. O ID do processo do shell gerado para executar o coprocesso está disponível como o valor da variável NAME_PID. O comando interno wait pode ser usado para aguardar o término do coprocesso.

Como o coprocesso é criado como um comando assíncrono, o comando coproc sempre retorna com sucesso. O status de retorno de um coprocesso é o status de saída de comando.

Definições de função de shell

Uma função shell é um objeto que é chamado como um comando simples e executa um comando composto com um novo conjunto de parâmetros posicionais. As funções de shell são declaradas da seguinte forma:

fname () compound-command [redirection]
function fname [()] compound-command [redirection]

Isso define uma função chamada fname. A palavra reservada função é opcional. Se a palavra reservada função for fornecida, os parênteses serão opcionais. O corpo da função é o comando composto comando-composto (consulte Comandos compostos acima). Esse comando geralmente é uma lista de comandos entre { e }, mas pode ser qualquer comando listado em Comandos compostos acima, com uma exceção: se a função palavra reservada é usada, mas os parênteses não são fornecidos, as chaves são obrigatórias. compound-command é executado sempre que fname é especificado como o nome de um comando simples. Quando no modo posix, fname deve ser um shell nome válido e não pode ser o nome de um dos POSIX especiais builtins. No modo padrão, um nome de função pode ser qualquer palavra shell sem aspas que não contenha $. Quaisquer redirecionamentos (consulte REDIRECIONAMENTO abaixo) especificados quando uma função é definida são executados quando a função é executada. O status de saída de uma definição de função é zero, a menos que ocorra um erro de sintaxe ou já exista uma função somente leitura com o mesmo nome. Quando executada, o status de saída de uma função é o status de saída do último comando executado no corpo. (Consulte FUNÇÕES abaixo.)

COMENTÁRIOS

Em um shell não interativo ou em um shell interativo no qual a opção interactive_comments para o shopt integrado está ativada (consulte COMANDOS SHELL BUILTIN abaixo) , uma palavra que começa com # faz com que essa palavra e todos os caracteres restantes nessa linha sejam ignorados. Um shell interativo sem a opção interactive_comments habilitada não permite comentários. A opção interactive_comments está ativada por padrão em shells interativos.

CITAÇÃO

Aspas é usado para remover o significado especial de certos caracteres ou palavras para o shell. As aspas podem ser usadas para desativar o tratamento especial para caracteres especiais, para impedir que palavras reservadas sejam reconhecidas como tal e para impedir a expansão de parâmetros.

Cada um dos metacaracteres listados acima em DEFINIÇÕES tem um significado especial para o shell e deve ser colocado entre aspas para representar a si mesmo.

Quando os recursos de expansão do histórico de comandos estão sendo usados (consulte EXPANSÃO DO HISTÓRICO abaixo), o caractere expansão do histórico, geralmente !, deve ser colocado entre aspas para evitar expansão da história.

Existem três mecanismos de aspas: o caractere de escape, aspas simples e aspas duplas.

Uma barra invertida sem aspas (\) é o caractere de escape. Ele preserva o valor literal do próximo caractere que segue, com exceção de . Se um par \ aparecer e a barra invertida não estiver entre aspas, a \ será tratada como uma continuação de linha (ou seja, será removida de o fluxo de entrada e efetivamente ignorado).

Colocar caracteres entre aspas simples preserva o valor literal de cada caractere entre aspas. Uma aspa simples não pode ocorrer entre aspas simples, mesmo quando precedida por uma barra invertida.

Colocar caracteres entre aspas duplas preserva o valor literal de todos os caracteres entre aspas, com exceção de $, `, \ e, quando a expansão do histórico está ativada, !. Quando o shell está no modo posix, o ! não tem nenhum significado especial entre aspas duplas, mesmo quando a expansão do histórico está habilitada. Os caracteres $ e ` mantêm seu significado especial entre aspas duplas. A barra invertida retém seu significado especial somente quando seguida por um dos seguintes caracteres: $, `,  " , \ ou <newline>. Uma aspa dupla pode ser colocada entre aspas duplas precedendo-a com uma barra invertida. Se ativada, a expansão do histórico será executada, a menos que um ! apareça em aspas duplas são escapadas usando uma barra invertida. A barra invertida que precede o ! não é removida.

Os parâmetros especiais * e @ têm um significado especial quando estão entre aspas duplas (consulte PARÂMETROS abaixo).

Palavras na forma $'string' são tratadas de forma especial. A palavra se expande para string, com caracteres de escape de barra invertida substituídos conforme especificado pelo padrão ANSI C. As sequências de escape de barra invertida, se presentes, são decodificadas da seguinte maneira:

\a

alerta (campainha)

\b

backspace

\e
\E

um personagem de fuga

\f

feed de formulário

\n

nova linha

\r

retorno de carruagem

\t

guia horizontal

\v

guia vertical

\\

barra invertida

\'

citação única

\"

citação dupla

\?

ponto de interrogação

\nnn

o caractere de oito bits cujo valor é o valor octal nnn (um a três dígitos octais)

\xHH

o caractere de oito bits cujo valor é o valor hexadecimal HH (um ou dois dígitos hexadecimais)

\uHHHH

o caractere Unicode (ISO/IEC 10646) cujo valor é o valor hexadecimal HHHH (um a quatro dígitos hexadecimais)

\UHHHHHHHH

o caractere Unicode (ISO/IEC 10646) cujo valor é o valor hexadecimal HHHHHHHH (um a oito dígitos hexadecimais)

\cx

um caractere x de controle

O resultado expandido é colocado entre aspas simples, como se o cifrão não estivesse presente.

Uma string entre aspas duplas precedida por um cifrão ($"string") fará com que a string seja traduzida de acordo com a localidade atual. A infra-estrutura gettext realiza a consulta e tradução do catálogo de mensagens, usando as variáveis de shell LC_MESSAGES e TEXTDOMAIN. Se a localidade atual for C ou POSIX, ou se não houver traduções disponíveis, o cifrão será ignorado. Se a string for traduzida e substituída, a substituição será colocada entre aspas duplas.

PARÂMETROS

Um parâmetro é uma entidade que armazena valores. Pode ser um nome, um número ou um dos caracteres especiais listados abaixo em Parâmetros especiais. Uma variável é um parâmetro denotado por um nome. Uma variável tem um valor e zero ou mais atributos. Os atributos são atribuídos usando o comando interno declare (consulte declare abaixo em COMANDOS SHELL BUILTIN).

Um parâmetro é definido se tiver sido atribuído um valor. A string nula é um valor válido. Depois que uma variável é definida, ela pode ser desdefinida apenas usando o comando interno unset (consulte COMANDOS SHELL BUILTIN abaixo).

Uma variável pode ser atribuída por uma instrução da forma

name=[value]

Se valor não for fornecido, a variável receberá a string nula. Todos os valores passam por expansão de til, expansão de parâmetro e variável, substituição de comando, expansão aritmética e remoção de aspas (consulte EXPANSÃO abaixo). Se a variável tiver seu atributo inteiro definido, então valor será avaliado como uma expressão aritmética mesmo se a expansão $ ((...)) não for usada (consulte Expansão aritmética abaixo). A divisão de palavras não é realizada, com exceção de "$@" conforme explicado abaixo em Parâmetros especiais. A expansão do nome do caminho não é executada. As instruções de atribuição também podem aparecer como argumentos para alias, declare, typeset, export, readonly< e comandos internos locais (comandos de declaração). Quando no modo posix, esses builtins podem aparecer em um comando após uma ou mais instâncias do builtin comando e manter essas propriedades de instrução de atribuição.

No contexto em que uma instrução de atribuição está atribuindo um valor a uma variável de shell ou índice de array, o operador += pode ser usado para anexar ou adicionar ao valor anterior da variável. Isso inclui argumentos para comandos integrados como declaração que aceitam declarações de atribuição (comandos de declaração). Quando += é aplicado a uma variável para a qual o atributo inteiro foi definido, valor é avaliado como uma expressão aritmética e adicionado ao valor atual da variável, que também é avaliado . Quando += é aplicado a uma variável de matriz usando atribuição composta (consulte Matrizes abaixo), o valor da variável não é definido (como ocorre ao usar =) e novos valores são anexados à matriz começando em um maior que o índice máximo da matriz (para matrizes indexadas) ou adicionado como pares chave-valor adicionais em uma matriz associativa. Quando aplicado a uma variável com valor de string, valor é expandido e anexado ao valor da variável.

Uma variável pode receber o atributo nameref usando a opção -n para os comandos internos declare ou local (consulte as descrições de declare e local abaixo) para criar um nameref ou uma referência a outra variável. Isso permite que as variáveis sejam manipuladas indiretamente. Sempre que a variável nameref é referenciada, atribuída, desdefinida ou tem seus atributos modificados (além de usar ou alterar o próprio atributo nameref), a operação é realmente executada na variável especificada pelo valor da variável nameref . Um nameref é comumente usado em funções shell para se referir a uma variável cujo nome é passado como um argumento para a função. Por exemplo, se um nome de variável for passado para uma função shell como seu primeiro argumento, executar

declare -n ref=$1

dentro da função cria uma variável nameref ref cujo valor é o nome da variável passado como primeiro argumento. Referências e atribuições a ref, e mudanças em seus atributos, são tratadas como referências, atribuições e modificações de atributos para a variável cujo nome foi passado como $1. Se a variável de controle em um loop for tiver o atributo nameref, a lista de palavras pode ser uma lista de variáveis shell, e uma referência de nome será estabelecida para cada palavra na lista, por sua vez, quando o loop é executado. As variáveis de matriz não podem receber o atributo nameref. No entanto, as variáveis nameref podem fazer referência a variáveis de array e variáveis de array subscritas. Namerefs podem ser desdefinidos usando a opção -n para o builtin desativar. Caso contrário, se unset for executado com o nome de uma variável nameref como argumento, a variável referenciada pela variável nameref será desativada.

Parâmetros posicionais

Um parâmetro posicional é um parâmetro denotado por um ou mais dígitos, exceto o único dígito 0. Parâmetros posicionais são atribuídos a partir dos argumentos do shell quando ele é invocado e podem ser reatribuídos usando o conjunto comando interno. Parâmetros posicionais não podem ser atribuídos com instruções de atribuição. Os parâmetros posicionais são substituídos temporariamente quando uma função shell é executada (consulte FUNÇÕES abaixo).

Quando um parâmetro posicional que consiste em mais de um único dígito é expandido, ele deve ser colocado entre chaves (consulte EXPANSÃO abaixo).

Parâmetros Especiais

O shell trata vários parâmetros de forma especial. Esses parâmetros só podem ser referenciados; atribuição a eles não é permitida.

*

Expande para os parâmetros posicionais, a partir de um. Quando a expansão não está entre aspas duplas, cada parâmetro posicional se expande para uma palavra separada. Nos contextos em que é executado, essas palavras estão sujeitas a mais divisão de palavras e expansão do nome do caminho. Quando a expansão ocorre entre aspas duplas, ela se expande para uma única palavra com o valor de cada parâmetro separado pelo primeiro caractere da variável especial IFS. Ou seja, "$*" é equivalente a "$1c$2c ...", onde c é o primeiro caractere do valor da variável IFS. Se IFS não estiver definido, os parâmetros serão separados por espaços. Se IFS for nulo, os parâmetros serão unidos sem separadores intermediários.

@

Expande para os parâmetros posicionais, a partir de um. Em contextos onde a divisão de palavras é realizada, isso expande cada parâmetro posicional para uma palavra separada; se não estiverem entre aspas duplas, essas palavras estão sujeitas a divisão de palavras. Em contextos onde a divisão de palavras não é realizada, ela se expande para uma única palavra com cada parâmetro posicional separado por um espaço. Quando a expansão ocorre entre aspas duplas, cada parâmetro se expande para uma palavra separada. Ou seja, "$@" é equivalente a "$1" "$2" ... Se a expansão de aspas duplas ocorrer dentro de uma palavra , a expansão do primeiro parâmetro é unida à parte inicial da palavra original e a expansão do último parâmetro é unida à última parte da palavra original. Quando não há parâmetros posicionais, "$@" e $@ se expandem para nada (ou seja, são removidos).

#

Expande para o número de parâmetros posicionais em decimal.

?

Expande para o status de saída do pipeline de primeiro plano executado mais recentemente.

-

Expande para os sinalizadores de opção atuais conforme especificado na chamada, pelo comando interno set ou aqueles definidos pelo próprio shell (como a opção -i).

$

Expande para o ID do processo do shell. Em um subshell(), ele se expande para o ID do processo do shell atual, não para o subshell.

!

Expande para o ID do processo do trabalho colocado mais recentemente em segundo plano, seja executado como um comando assíncrono ou usando o bg integrado (consulte JOB CONTROL abaixo).

0

Expande para o nome do shell ou script de shell. Isso é definido na inicialização do shell. Se bash for chamado com um arquivo de comandos, $0 será definido como o nome desse arquivo. Se bash for iniciado com a opção -c, então $0 será definido como o primeiro argumento após a string a ser executada, se houver uma presente . Caso contrário, é definido como o nome do arquivo usado para invocar bash, conforme fornecido pelo argumento zero.

Variáveis de shell

As seguintes variáveis são definidas pelo shell:

_

Na inicialização do shell, defina o nome do caminho usado para invocar o shell ou o script de shell que está sendo executado conforme passado no ambiente ou na lista de argumentos. Posteriormente, expande o último argumento para o comando simples anterior executado em primeiro plano, após a expansão. Defina também o caminho completo usado para invocar cada comando executado e colocado no ambiente exportado para esse comando. Ao verificar o correio, esse parâmetro contém o nome do arquivo de correio que está sendo verificado no momento.

BASH

Expande para o nome de arquivo completo usado para invocar esta instância de bash.

BASHOPTS

Uma lista separada por dois-pontos de opções de shell ativadas. Cada palavra na lista é um argumento válido para a opção -s do comando interno shopt (consulte COMANDOS SHELL BUILTIN abaixo). As opções que aparecem em BASHOPTS são aquelas relatadas como on por shopt. Se esta variável estiver no ambiente quando bash iniciar, cada opção de shell na lista será habilitada antes de ler qualquer arquivo de inicialização. Esta variável é somente leitura.

BASHPID

Expande para o ID do processo bash atual. Isso difere de $$ em certas circunstâncias, como subshells que não exigem que o bash seja reinicializado. Atribuições para BASHPID não têm efeito. Se BASHPID não for definido, ele perderá suas propriedades especiais, mesmo que seja redefinido posteriormente.

BASH_ALIASES

Uma variável de matriz associativa cujos membros correspondem à lista interna de aliases mantida pelo alias integrado. Os elementos adicionados a essa matriz aparecem na lista de alias; no entanto, a desativação dos elementos da matriz atualmente não faz com que os aliases sejam removidos da lista de alias. Se BASH_ALIASES não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

BASH_ARGC

Uma variável de matriz cujos valores são o número de parâmetros em cada quadro da pilha de chamada de execução bash atual. O número de parâmetros para a sub-rotina atual (função shell ou script executado com . ou fonte) está no topo da pilha. Quando uma sub-rotina é executada, o número de parâmetros passados é enviado para BASH_ARGC. O shell define BASH_ARGC somente quando está no modo de depuração estendida (consulte a descrição da opção extdebug para o shopt integrado abaixo). Definir extdebug após o shell iniciar a execução de um script ou referenciar essa variável quando extdebug não estiver definido pode resultar em valores inconsistentes.

BASH_ARGV

Uma variável de matriz contendo todos os parâmetros na pilha de chamada de execução bash atual. O parâmetro final da última chamada de sub-rotina está no topo da pilha; o primeiro parâmetro da chamada inicial está na parte inferior. Quando uma sub-rotina é executada, os parâmetros fornecidos são enviados para BASH_ARGV. O shell define BASH_ARGV apenas quando está no modo de depuração estendida (consulte a descrição da opção extdebug para o shopt integrado abaixo). Definir extdebug após o shell iniciar a execução de um script ou referenciar essa variável quando extdebug não estiver definido pode resultar em valores inconsistentes.

BASH_ARGV0

Quando referenciada, esta variável se expande para o nome do shell ou script de shell (idêntico a $0; veja a descrição do parâmetro especial 0 acima). A atribuição a BASH_ARGV0 faz com que o valor atribuído também seja atribuído a $0. Se BASH_ARGV0 não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

BASH_CMDS

Uma variável de matriz associativa cujos membros correspondem à tabela hash interna de comandos mantida pelo hash integrado. Os elementos adicionados a essa matriz aparecem na tabela de hash; no entanto, a desativação de elementos de matriz atualmente não faz com que os nomes de comando sejam removidos da tabela de hash. Se BASH_CMDS não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

BASH_COMMAND

O comando que está sendo executado no momento ou prestes a ser executado, a menos que o shell esteja executando um comando como resultado de uma interceptação, caso em que é o comando em execução no momento da interceptação. Se BASH_COMMAND não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

BASH_EXECUTION_STRING

O argumento de comando para a opção de invocação -c.

BASH_LINENO

Uma variável de matriz cujos membros são os números de linha nos arquivos de origem em que cada membro correspondente de FUNCNAME foi invocado. $ {BASH_LINENO[$i]} é o número da linha no arquivo de origem ($ {BASH_SOURCE[<$i+1]}) onde $ {FUNCNAME[$i ]} foi chamado (ou $ {BASH_LINENO[$i-1]} se referenciado em outra função shell) . Use LINENO para obter o número da linha atual.

BASH_LOADABLES_PATH

Uma lista de diretórios separados por dois-pontos na qual o shell procura por builtins dinamicamente carregáveis especificados pelo comando enable.

BASH_REMATCH

Uma variável de matriz cujos membros são atribuídos pelo operador binário =~ ao comando condicional [[. O elemento com índice 0 é a parte da string que corresponde a toda a expressão regular. O elemento com índice n é a parte da string correspondente à nésima subexpressão entre parênteses.

BASH_SOURCE

Uma variável de matriz cujos membros são os nomes de arquivo de origem em que os nomes de função shell correspondentes na variável de matriz FUNCNAME são definidos. A função shell $ {FUNCNAME[$i]} é definida no arquivo $ {BASH_SOURCE[$i]} e chamado de $ {BASH_SOURCE[$i+1 ]}.

BASH_SUBSHELL

Incrementado em um dentro de cada subshell ou ambiente de subshell quando o shell começa a executar naquele ambiente. O valor inicial é 0. Se BASH_SUBSHELL não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

BASH_VERSINFO

Uma variável de matriz somente leitura cujos membros contêm informações de versão para esta instância de bash. Os valores atribuídos aos membros da matriz são os seguintes:

BASH_VERSINFO[0]

O número da versão principal (o lançamento).

BASH_VERSINFO[1]

O número da versão secundária (a versão).

BASH_VERSINFO[2]

O nível do patch.

BASH_VERSINFO[3]

A versão de construção.

BASH_VERSINFO[4]

O status de lançamento (por exemplo, beta1).

BASH_VERSINFO[5]

O valor de MACHTYPE.

BASH_VERSION

Expande para uma string que descreve a versão desta instância de bash.

COMP_CWORD

Um índice em $ {COMP_WORDS} da palavra que contém a posição atual do cursor. Esta variável está disponível apenas em funções de shell invocadas pelos recursos de conclusão programável (consulte Conclusão programável abaixo).

COMP_KEY

A chave (ou chave final de uma sequência de teclas) usada para invocar a função de conclusão atual.

COMP_LINE

A linha de comando atual. Esta variável está disponível apenas em funções de shell e comandos externos invocados pelos recursos de conclusão programável (consulte Conclusão programável abaixo).

COMP_POINT

O índice da posição atual do cursor em relação ao início do comando atual. Se a posição atual do cursor estiver no final do comando atual, o valor dessa variável será $ {#COMP_LINE}. Esta variável está disponível apenas em funções de shell e comandos externos invocados pelos recursos de conclusão programável (consulte Conclusão programável abaixo).

COMP_TYPE

Definido como um valor inteiro correspondente ao tipo de conclusão tentada que causou a chamada de uma função de conclusão: TAB, para conclusão normal, ?, para listar conclusões após tabulações sucessivas, !, para listar alternativas na conclusão parcial de palavras, @, para listar conclusões se a palavra não for modificada, ou %, para conclusão de menu. Esta variável está disponível apenas em funções de shell e comandos externos invocados pelos recursos de conclusão programável (consulte Conclusão programável abaixo).

COMP_WORDBREAKS

O conjunto de caracteres que a biblioteca readline trata como separadores de palavras ao executar a conclusão de palavras. Se COMP_WORDBREAKS não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

COMP_WORDS

Uma variável de matriz (consulte Matrizes abaixo) que consiste nas palavras individuais na linha de comando atual. A linha é dividida em palavras como readline a dividiria, usando COMP_WORDBREAKS conforme descrito acima. Esta variável está disponível apenas em funções de shell invocadas pelos recursos de conclusão programável (consulte Conclusão programável abaixo).

COPROC

Uma variável de matriz (consulte Arrays abaixo) criada para conter os descritores de arquivo para saída e entrada em um coprocesso sem nome (consulte Coprocessos acima).

DIRSTACK

Uma variável de matriz (consulte Arrays abaixo) contendo o conteúdo atual da pilha de diretórios. Os diretórios aparecem na pilha na ordem em que são exibidos pelos dirs integrados. A atribuição a membros desta variável de array pode ser usada para modificar diretórios já na pilha, mas os builtins pushd e popd devem ser usados para adicionar e remover diretórios. A atribuição a esta variável não alterará o diretório atual. Se DIRSTACK não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

EPOCHREALTIME

Cada vez que este parâmetro é referenciado, ele se expande para o número de segundos desde a Época Unix (consulte tempo(3)) como um valor de ponto flutuante com granularidade de microssegundos. Atribuições para EPOCHREALTIME são ignoradas. Se EPOCHREALTIME não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

EPOCHSECONDS

Cada vez que este parâmetro é referenciado, ele se expande para o número de segundos desde a Época Unix (consulte tempo(3)). Atribuições para EPOCHSECONDS são ignoradas. Se EPOCHSECONDS não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

EUID

Expande para o ID de usuário efetivo do usuário atual, inicializado na inicialização do shell. Esta variável é somente leitura.

FUNCNAME

Uma variável de matriz contendo os nomes de todas as funções shell atualmente na pilha de chamadas de execução. O elemento com índice 0 é o nome de qualquer função shell em execução no momento. O elemento mais abaixo (aquele com o índice mais alto) é "principal". Essa variável existe apenas quando uma função shell está em execução. Atribuições para FUNCNAME não têm efeito. Se FUNCNAME não for definido, ele perderá suas propriedades especiais, mesmo que seja redefinido posteriormente.

Esta variável pode ser usada com BASH_LINENO e BASH_SOURCE. Cada elemento de FUNCNAME possui elementos correspondentes em BASH_LINENO e BASH_SOURCE para descrever a pilha de chamadas. Por exemplo, $ {FUNCNAME[$i]} foi chamado do arquivo $ {BASH_SOURCE[$i+1]} no número da linha $ {BASH_LINENO[$i ]}. O chamador integrado exibe a pilha de chamadas atual usando essas informações.

GROUPS

Uma variável de matriz contendo a lista de grupos dos quais o usuário atual é membro. As atribuições a GROUPS não têm efeito. Se GROUPS não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

HISTCMD

O número do histórico, ou índice na lista de históricos, do comando atual. Atribuições para HISTCMD são ignoradas. Se HISTCMD não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

HOSTNAME

Definido automaticamente para o nome do host atual.

HOSTTYPE

Definido automaticamente como uma string que descreve exclusivamente o tipo de máquina na qual o bash está sendo executado. O padrão é dependente do sistema.

LINENO

Sempre que esse parâmetro é referenciado, o shell o substitui por um número decimal que representa o número da linha sequencial atual (começando com 1) em um script ou função. Quando não estiver em um script ou função, não há garantia de que o valor substituído seja significativo. Se LINENO for desativado, ele perderá suas propriedades especiais, mesmo que seja redefinido posteriormente.

MACHTYPE

Definido automaticamente como uma string que descreve totalmente o tipo de sistema no qual o bash está sendo executado, no formato padrão GNU cpu-company-system. O padrão é dependente do sistema.

MAPFILE

Uma variável de matriz (consulte Arrays abaixo) criada para conter o texto lido pelo mapfile integrado quando nenhum nome de variável é fornecido.

OLDPWD

O diretório de trabalho anterior definido pelo comando cd.

OPTARG

O valor do último argumento de opção processado pelo comando interno getopts (consulte COMANDOS SHELL BUILTIN abaixo).

OPTIND

O índice do próximo argumento a ser processado pelo comando interno getopts (consulte COMANDOS SHELL BUILTIN abaixo).

OSTYPE

Definido automaticamente como uma string que descreve o sistema operacional no qual o bash está sendo executado. O padrão é dependente do sistema.

PIPESTATUS

Uma variável de matriz (consulte Matrizes abaixo) contendo uma lista de valores de status de saída dos processos no pipeline de primeiro plano executado mais recentemente (que pode conter apenas um único comando).

PPID

O ID do processo do pai do shell. Esta variável é somente leitura.

PWD

O diretório de trabalho atual conforme definido pelo comando cd.

RANDOM

Cada vez que este parâmetro é referenciado, ele se expande para um número inteiro aleatório entre 0 e 32767. Atribuir um valor a RANDOM inicializa (sementes) a sequência de números aleatórios. Se RANDOM não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

READLINE_LINE

O conteúdo do buffer de linha readline, para uso com "bind -x" (consulte COMANDOS SHELL BUILTIN abaixo).

READLINE_MARK

A posição da marca (ponto de inserção salvo) no buffer de linha readline, para uso com "bind -x" (consulte COMANDOS SHELL BUILTIN abaixo). Os caracteres entre o ponto de inserção e a marca geralmente são chamados de região.

READLINE_POINT

A posição do ponto de inserção no buffer de linha readline, para uso com "bind -x" (consulte COMANDOS SHELL BUILTIN abaixo).

REPLY

Definido como a linha de entrada lida pelo comando interno read quando nenhum argumento é fornecido.

SECONDS

Cada vez que esse parâmetro é referenciado, o número de segundos desde a invocação do shell é retornado. Se um valor for atribuído a SECONDS, o valor retornado nas referências subsequentes é o número de segundos desde a atribuição mais o valor atribuído. O número de segundos na invocação do shell e a hora atual são sempre determinados consultando o relógio do sistema. Se SECONDS não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

SHELLOPTS

Uma lista separada por dois-pontos de opções de shell ativadas. Cada palavra na lista é um argumento válido para a opção -o para o comando interno set (consulte COMANDOS SHELL BUILTIN abaixo). As opções que aparecem em SHELLOPTS são aquelas relatadas como on por set -o. Se esta variável estiver no ambiente quando bash iniciar, cada opção de shell na lista será habilitada antes de ler qualquer arquivo de inicialização. Esta variável é somente leitura.

SHLVL

Incrementado em um cada vez que uma instância de bash é iniciada.

SRANDOM

Essa variável se expande para um número pseudo-aleatório de 32 bits cada vez que é referenciada. O gerador de números aleatórios não é linear em sistemas que suportam /dev/urandom ou arc4random, então cada número retornado não tem relação com os números que o precedem. O gerador de números aleatórios não pode ser propagado, portanto, as atribuições a essa variável não têm efeito. Se SRANDOM não for definido, ele perderá suas propriedades especiais, mesmo se for redefinido posteriormente.

UID

Expande para o ID do usuário atual, inicializado na inicialização do shell. Esta variável é somente leitura.

As seguintes variáveis são usadas pelo shell. Em alguns casos, bash atribui um valor padrão a uma variável; esses casos são descritos abaixo.

BASH_COMPAT

O valor é usado para definir o nível de compatibilidade do shell. Consulte MODO DE COMPATIBILIDADE SHELL abaixo para obter uma descrição dos vários níveis de compatibilidade e seus efeitos. O valor pode ser um número decimal (por exemplo, 4,2) ou um número inteiro (por exemplo, 42) correspondente ao nível de compatibilidade desejado. Se BASH_COMPAT não for definido ou definido como uma string vazia, o nível de compatibilidade será definido como padrão para a versão atual. Se BASH_COMPAT for definido com um valor que não seja um dos níveis de compatibilidade válidos, o shell imprimirá uma mensagem de erro e definirá o nível de compatibilidade como padrão para a versão atual. Os valores válidos correspondem aos níveis de compatibilidade descritos abaixo em

BSHELLCOMPATIBILIDADEMODO. Por exemplo, 4.2 e 42 são valores válidos que correspondem à opção compat42 shopt e definem o nível de compatibilidade como 42. A versão atual também é um valor válido.

BASH_ENV

Se este parâmetro for definido quando bash estiver executando um shell script, seu valor será interpretado como um nome de arquivo contendo comandos para inicializar o shell, como em ~/.bashrc. O valor de BASH_ENV está sujeito à expansão de parâmetros, substituição de comandos e expansão aritmética antes de ser interpretado como um nome de arquivo.

PATH não é usado para procurar o nome do arquivo resultante.

BASH_XTRACEFD

Se definido como um número inteiro correspondente a um descritor de arquivo válido, bash gravará a saída de rastreamento gerada quando set -x estiver ativado para esse descritor de arquivo. O descritor de arquivo é fechado quando BASH_XTRACEFD é desativado ou atribuído a um novo valor. Desativar BASH_XTRACEFD ou atribuir a ele uma string vazia faz com que a saída do rastreamento seja enviada para o erro padrão. Observe que definir BASH_XTRACEFD como 2 (o descritor de arquivo de erro padrão) e, em seguida, desmarcá-lo resultará no fechamento do erro padrão.

CDPATH

O caminho de pesquisa para o comando cd. Esta é uma lista de diretórios separados por dois-pontos na qual o shell procura os diretórios de destino especificados pelo comando cd. Um valor de amostra é ".:~:/usr".

CHILD_MAX

Defina o número de valores de status filho encerrados para o shell lembrar. O Bash não permitirá que esse valor seja reduzido abaixo de um mínimo exigido pelo POSIX, e há um valor máximo (atualmente 8192) que não pode exceder. O valor mínimo depende do sistema.

COLUMNS

Usado pelo comando composto select para determinar a largura do terminal ao imprimir listas de seleção. Definido automaticamente se a opção checkwinsize estiver ativada ou em um shell interativo ao receber um SIGWINCH.

COMPREPLY

Uma variável de matriz da qual bash lê as possíveis conclusões geradas por uma função shell invocada pelo recurso de conclusão programável (consulte Conclusão programável abaixo). Cada elemento da matriz contém uma conclusão possível.

EMACS

Se o bash encontrar essa variável no ambiente quando o shell iniciar com o valor "t", ele assumirá que o shell está sendo executado em um buffer de shell do Emacs e desativará a edição de linha.

ENV

Expandido e executado de forma semelhante a BASH_ENV (consulte INVOCATION acima) quando um shell interativo é invocado no modo posix.

EXECIGNORE

Uma lista separada por dois pontos de padrões de shell (consulte Correspondência de padrões) definindo a lista de nomes de arquivos a serem ignorados pela pesquisa de comando usando PATH. Arquivos cujos nomes de caminho completos correspondem a um desses padrões não são considerados arquivos executáveis para fins de conclusão e execução de comando por meio da pesquisa PATH. Isso não afeta o comportamento dos comandos [, teste e [[. Os nomes de caminho completos na tabela de hash de comando não estão sujeitos a EXECIGNORE. Use esta variável para ignorar os arquivos de biblioteca compartilhada que possuem o bit executável definido, mas não são arquivos executáveis. A correspondência de padrões respeita a configuração da opção de shell extglob.

FCEDIT

O editor padrão para o comando interno fc.

FIGNORE

Uma lista de sufixos separados por dois-pontos a serem ignorados ao executar a conclusão do nome do arquivo (consulte READLINE abaixo). Um nome de arquivo cujo sufixo corresponde a uma das entradas em FIGNORE é excluído da lista de nomes de arquivo correspondentes. Um valor de amostra é ".o:~".

FUNCNEST

Se definido como um valor numérico maior que 0, define um nível máximo de aninhamento de função. As invocações de função que excedem esse nível de aninhamento farão com que o comando atual seja interrompido.

GLOBIGNORE

Uma lista de padrões separados por dois-pontos que define o conjunto de nomes de arquivos a serem ignorados pela expansão do nome do caminho. Se um nome de arquivo correspondente a um padrão de expansão de nome de caminho também corresponder a um dos padrões em GLOBIGNORE, ele será removido da lista de correspondências.

HISTCONTROL

Uma lista de valores separados por dois-pontos que controla como os comandos são salvos na lista de histórico. Se a lista de valores incluir ignorespace, as linhas que começam com um caractere espaço não são salvas na lista de histórico. Um valor de ignoredups faz com que as linhas correspondentes à entrada do histórico anterior não sejam salvas. Um valor de ignoreboth é um atalho para ignorespace e ignoredups. Um valor de erasedups faz com que todas as linhas anteriores correspondentes à linha atual sejam removidas da lista de histórico antes que essa linha seja salva. Qualquer valor que não esteja na lista acima é ignorado. Se HISTCONTROL não estiver definido ou não incluir um valor válido, todas as linhas lidas pelo analisador de shell serão salvas na lista de histórico, sujeitas ao valor de HISTIGNORE. A segunda linha e as subsequentes de um comando composto de várias linhas não são testadas e são adicionadas ao histórico independentemente do valor de HISTCONTROL.

HISTFILE

O nome do arquivo no qual o histórico de comandos é salvo (consulte HISTORY abaixo). O valor padrão é ~/.bash_history. Se não for definido, o histórico de comandos não será salvo quando um shell for encerrado.

HISTFILESIZE

O número máximo de linhas contidas no arquivo de histórico. Quando esta variável recebe um valor, o arquivo de histórico é truncado, se necessário, para não conter mais do que esse número de linhas, removendo as entradas mais antigas. O arquivo de histórico também é truncado para esse tamanho depois de gravá-lo quando um shell é encerrado. Se o valor for 0, o arquivo de histórico será truncado para o tamanho zero. Valores não numéricos e valores numéricos menores que zero inibem o truncamento. O shell define o valor padrão para o valor de HISTSIZE depois de ler qualquer arquivo de inicialização.

HISTIGNORE

Uma lista de padrões separados por dois-pontos usada para decidir quais linhas de comando devem ser salvas na lista de histórico. Cada padrão é ancorado no início da linha e deve corresponder à linha completa (nenhum `*' implícito é anexado). Cada padrão é testado contra a linha após as verificações especificadas por HISTCONTROL serem aplicadas. Além dos caracteres normais de correspondência do padrão de shell, `&' corresponde à linha do histórico anterior. `&' pode ser escapado usando uma barra invertida; a barra invertida é removida antes de tentar uma correspondência. A segunda linha e as subsequentes de um comando composto de várias linhas não são testadas e são adicionadas ao histórico independentemente do valor de HISTIGNORE. A correspondência de padrões respeita a configuração da opção de shell extglob.

HISTSIZE

O número de comandos a serem lembrados no histórico de comandos (consulte HISTÓRICO abaixo). Se o valor for 0, os comandos não são salvos na lista de histórico. Valores numéricos menores que zero resultam em todos os comandos sendo salvos na lista de histórico (não há limite). O shell define o valor padrão como 500 depois de ler qualquer arquivo de inicialização.

HISTTIMEFORMAT

Se esta variável for definida e não nula, seu valor será usado como uma string de formato para strftime(3) para imprimir o carimbo de data/hora associado a cada entrada de histórico exibida pelo history construídas em. Se essa variável for definida, os carimbos de data/hora serão gravados no arquivo de histórico para que possam ser preservados nas sessões de shell. Isso usa o caractere de comentário do histórico para distinguir timestamps de outras linhas do histórico.

HOME

O diretório inicial do usuário atual; o argumento padrão para o comando interno cd. O valor dessa variável também é usado ao executar a expansão do til.

HOSTFILE

Contém o nome de um arquivo no mesmo formato que  /etc/hosts  que deve ser lido quando o shell precisa completar um nome de host. A lista de possíveis conclusões de nomes de host pode ser alterada enquanto o shell estiver em execução; da próxima vez que a conclusão do nome do host for tentada depois que o valor for alterado, bash adicionará o conteúdo do novo arquivo à lista existente. Se HOSTFILE estiver definido, mas não tiver valor ou não nomear um arquivo legível, bash tentará ler  /etc/hosts  para obter o lista de possíveis conclusões de nomes de host. Quando HOSTFILE não está definido, a lista de nomes de host é limpa.

IFS

O Separador de Campo Interno que é usado para divisão de palavras após a expansão e para dividir linhas em palavras com o comando interno ler. O valor padrão é ``<tab>''.

IGNOREEOF

Controla a ação de um shell interativo ao receber um caractere EOF como a única entrada. Se definido, o valor é o número de caracteres EOF consecutivos que devem ser digitados como os primeiros caracteres em uma linha de entrada antes de bash sair. Se a variável existir, mas não tiver um valor numérico ou não tiver valor, o valor padrão é 10. Se não existir, EOF significa o fim da entrada no shell.

INPUTRC

O nome de arquivo para o arquivo de inicialização readline, substituindo o padrão de  ~/.inputrc  (consulte READLINE abaixo).

INSIDE_EMACS

Se esta variável aparecer no ambiente quando o shell for iniciado, o bash assume que está rodando dentro de um buffer do shell Emacs e pode desabilitar a edição de linha, dependendo do valor de TERM.

LANG

Usado para determinar a categoria de localidade para qualquer categoria não selecionada especificamente com uma variável começando com LC_.

LC_ALL

Esta variável substitui o valor de LANG e qualquer outra variável LC_ que especifique uma categoria de localidade.

LC_COLLATE

Essa variável determina a ordem de agrupamento usada ao classificar os resultados da expansão de nome de caminho e determina o comportamento de expressões de intervalo, classes de equivalência e sequências de agrupamento na expansão de nome de caminho e correspondência de padrão.

LC_CTYPE

Essa variável determina a interpretação dos caracteres e o comportamento das classes de caracteres na expansão do nome do caminho e na correspondência de padrões.

LC_MESSAGES

Esta variável determina a localidade usada para traduzir strings com aspas duplas precedidas por um $.

LC_NUMERIC

Essa variável determina a categoria de localidade usada para formatação numérica.

LC_TIME

Essa variável determina a categoria de localidade usada para formatação de dados e hora.

LINES

Usado pelo comando composto select para determinar o comprimento da coluna para imprimir listas de seleção. Definido automaticamente se a opção checkwinsize estiver ativada ou em um shell interativo ao receber um SIGWINCH.

MAIL

Se este parâmetro for definido como um nome de arquivo ou diretório e a variável MAILPATH não for definida, bash informará o usuário sobre a chegada de e-mail no arquivo ou formato Maildir especificado diretório.

MAILCHECK

Especifica com que frequência (em segundos) o bash verifica o correio. O padrão é 60 segundos. Quando é hora de verificar o correio, o shell o faz antes de exibir o prompt principal. Se essa variável não for definida ou for definida com um valor que não seja um número maior ou igual a zero, o shell desabilitará a verificação de correio.

MAILPATH

Uma lista separada por dois-pontos de nomes de arquivos a serem verificados quanto a mensagens. A mensagem a ser impressa quando o e-mail chega em um determinado arquivo pode ser especificada separando o nome do arquivo da mensagem com um '?'. Quando usado no texto da mensagem, $_ expande para o nome do arquivo de mensagens atual. Exemplo:

MAILPATH='/var/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'

Bash pode ser configurado para fornecer um valor padrão para esta variável (não há valor padrão), mas a localização dos arquivos de e-mail do usuário que ele usa depende do sistema (por exemplo, ).

/var/mail/$USER
OPTERR

Se definido com o valor 1, bash exibe mensagens de erro geradas pelo comando interno getopts (consulte COMANDOS SHELL BUILTIN abaixo).

OPTERR é inicializado com 1 cada vez que o shell é invocado ou um script de shell é executado.

PATH

O caminho de pesquisa para comandos. É uma lista de diretórios separados por dois-pontos na qual o shell procura por comandos (consulte EXECUÇÃO DE COMANDO abaixo). Um nome de diretório de comprimento zero (nulo) no valor de PATH indica o diretório atual. Um nome de diretório nulo pode aparecer como dois dois-pontos adjacentes ou como dois-pontos iniciais ou finais. O caminho padrão depende do sistema e é definido pelo administrador que instala o bash. Um valor comum é

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
POSIXLY_CORRECT

Se esta variável estiver no ambiente quando o bash iniciar, o shell entrará no modo posix antes de ler os arquivos de inicialização, como se a invocação --posix opção foi fornecida. Se for definido durante a execução do shell, bash ativa o modo posix, como se o comando set -o posix tivesse sido executado. Quando o shell entra no modo posix, ele define essa variável se ainda não estiver definida.

PROMPT_COMMAND

Se essa variável for definida e for uma matriz, o valor de cada elemento definido será executado como um comando antes de emitir cada prompt principal. Se for definido, mas não for uma variável de matriz, seu valor será usado como um comando a ser executado.

PROMPT_DIRTRIM

Se definido como um número maior que zero, o valor é usado como o número de componentes de diretório à direita a serem retidos ao expandir os escapes de string de prompt \w e \W (consulte PROMPTING abaixo). Os caracteres removidos são substituídos por reticências.

PS0

O valor desse parâmetro é expandido (consulte PROMPTING abaixo) e exibido por shells interativos após a leitura de um comando e antes de o comando ser executado.

PS1

O valor desse parâmetro é expandido (consulte PROMPTING abaixo) e usado como string de prompt principal. O valor padrão é ``\s-\v\$''.

PS2

O valor desse parâmetro é expandido como em PS1 e usado como string de prompt secundário. O padrão é ``> ''.

PS3

O valor deste parâmetro é usado como prompt para o comando select (consulte SHELL GRAMMAR acima).

PS4

O valor deste parâmetro é expandido como com PS1 e o valor é impresso antes de cada comando bash exibido durante um rastreamento de execução. O primeiro caractere do valor expandido de PS4 é replicado várias vezes, conforme necessário, para indicar vários níveis de indireção. O padrão é ``+ ''.

SHELL

Essa variável se expande para o nome do caminho completo para o shell. Se não for definido quando o shell for iniciado, bash atribuirá a ele o caminho completo do shell de login do usuário atual.

TIMEFORMAT

O valor desse parâmetro é usado como uma string de formato especificando como as informações de tempo para pipelines prefixadas com a palavra reservada time devem ser exibidas. O caractere % introduz uma sequência de escape que é expandida para um valor de tempo ou outra informação. As sequências de escape e seus significados são os seguintes; as chaves denotam partes opcionais.

%%

Um % literal.

%[p][l]R

O tempo decorrido em segundos.

%[p][l]U

O número de segundos de CPU gastos no modo de usuário.

%[p][l]S

O número de segundos de CPU gastos no modo de sistema.

%P

A porcentagem da CPU, calculada como (%U + %S)/%R.

O p opcional é um dígito que especifica a precisão, o número de dígitos fracionários após um ponto decimal. Um valor de 0 não faz com que nenhum ponto decimal ou fração seja exibido. Podem ser especificadas no máximo três casas após a vírgula; valores de p maiores que 3 são alterados para 3. Se p não for especificado, o valor 3 será usado.

O l opcional especifica um formato mais longo, incluindo minutos, no formato MMmSS.FFs. O valor de p determina se a fração é incluída ou não.

Se esta variável não for definida, bash agirá como se tivesse o valor $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS' . Se o valor for nulo, nenhuma informação de tempo será exibida. Uma nova linha à direita é adicionada quando a string de formato é exibida.

TMOUT

Se definido com um valor maior que zero, TMOUT é tratado como o tempo limite padrão para o builtin read. O comando select termina se a entrada não chegar depois

TMOUT segundos quando a entrada vem de um terminal. Em um shell interativo, o valor é interpretado como o número de segundos para aguardar uma linha de entrada após a emissão do prompt principal. Bash termina após esperar por esse número de segundos se uma linha completa de entrada não chegar.

TMPDIR

Se definido, bash usa seu valor como o nome de um diretório no qual bash cria arquivos temporários para uso do shell.

auto_resume

Essa variável controla como o shell interage com o usuário e o controle do trabalho. Se esta variável for definida, comandos simples de palavra única sem redirecionamentos serão tratados como candidatos para a retomada de uma tarefa interrompida existente. Não há ambigüidade permitida; se houver mais de um trabalho começando com a string digitada, o trabalho acessado mais recentemente é selecionado. O nome de um trabalho interrompido, neste contexto, é a linha de comando usada para iniciá-lo. Se definido com o valor exact, a string fornecida deve corresponder exatamente ao nome de uma tarefa interrompida; se definido como substring, a string fornecida precisa corresponder a uma substring do nome de um trabalho interrompido. O valor substring fornece funcionalidade análoga ao identificador de trabalho %? (consulte JOB CONTROL abaixo). Se definido com qualquer outro valor, a sequência fornecida deve ser um prefixo do nome de uma tarefa interrompida; isso fornece funcionalidade análoga ao identificador de tarefa %string.

histchars

Os dois ou três caracteres que controlam a expansão do histórico e a tokenização (consulte EXPANSÃO DO HISTÓRICO abaixo). O primeiro caractere é o caractere de expansão da história, o caractere que sinaliza o início de uma expansão da história, normalmente `!'. O segundo caractere é o caractere de substituição rápida, que é usado como atalho para reexecutar o comando anterior digitado, substituindo uma string por outra no comando. O padrão é `^'. O terceiro caractere opcional é o caractere que indica que o restante da linha é um comentário quando encontrado como o primeiro caractere de uma palavra, normalmente `#'. O caractere de comentário do histórico faz com que a substituição do histórico seja ignorada para as palavras restantes na linha. Isso não faz necessariamente com que o analisador de shell trate o restante da linha como um comentário.

Matrizes

Bash fornece variáveis de array unidimensionais indexadas e associativas. Qualquer variável pode ser usada como um array indexado; o builtin declarar declarará explicitamente um array. Não há limite máximo para o tamanho de uma matriz, nem qualquer requisito para que os membros sejam indexados ou atribuídos de forma contígua. Matrizes indexadas são referenciadas usando números inteiros (incluindo expressões aritméticas) e são baseadas em zero; matrizes associativas são referenciadas usando strings arbitrárias. Salvo indicação em contrário, os índices de array indexados devem ser números inteiros não negativos.

Uma matriz indexada é criada automaticamente se qualquer variável for atribuída usando a sintaxe nome[subscrito]=valor. O subscrito é tratado como uma expressão aritmética que deve resultar em um número. Para declarar explicitamente uma matriz indexada, use declare -a name (consulte COMANDOS SHELL BUILTIN abaixo). declare -a nome[subscrito] também é aceito; o subscrito é ignorado.

Matrizes associativas são criadas usando declare -A nome.

Os atributos podem ser especificados para uma variável de array usando os builtins declare e readonly. Cada atributo se aplica a todos os membros de uma matriz.

As matrizes são atribuídas ao uso de atribuições compostas na forma nome=(valor1 ... valorn), onde cada valor pode estar no formato [subscript]=string. Atribuições de matrizes indexadas não requerem nada além de string. Cada valor na lista é expandido usando todas as expansões shell descritas abaixo em EXPANSÃO. Ao atribuir a matrizes indexadas, se os colchetes e subscritos opcionais forem fornecidos, esse índice será atribuído; caso contrário, o índice do elemento atribuído será o último índice atribuído pela instrução mais um. A indexação começa em zero.

Ao atribuir a uma matriz associativa, as palavras em uma atribuição composta podem ser declarações de atribuição, para as quais o subscrito é necessário, ou uma lista de palavras que é interpretada como uma sequência de chaves e valores alternados: nome =( chave1 valor1 chave2 valor2 ...). Estes são tratados de forma idêntica a nome=( [chave1]=valor1 [chave2 ]=valor2 ...). A primeira palavra da lista determina como as palavras restantes são interpretadas; todas as atribuições em uma lista devem ser do mesmo tipo. Ao usar pares chave/valor, as chaves não podem estar ausentes ou vazias; um valor ausente final é tratado como a string vazia.

Esta sintaxe também é aceita pelo builtin declarar. Elementos individuais da matriz podem ser atribuídos usando a sintaxe nome[subscrito]=valor introduzida acima. Ao atribuir a uma matriz indexada, se nome for subscrito por um número negativo, esse número será interpretado como relativo a um maior que o índice máximo de nome, portanto, índices negativos contam de volta do final da matriz e um índice de -1 referencia o último elemento.

Qualquer elemento de uma matriz pode ser referenciado usando $ {nome[subscrito]}. As chaves são necessárias para evitar conflitos com a expansão do nome do caminho. Se subscrito for @ ou *, a palavra se expandirá para todos os membros de nome. Esses subscritos diferem apenas quando a palavra aparece entre aspas duplas. Se a palavra estiver entre aspas duplas, $ {nome[*]} se expande para uma única palavra com o valor de cada membro da matriz separado pelo primeiro caractere do IFS variável especial e $ {nome[@]} expande cada elemento de nome para uma palavra separada. Quando não há membros da matriz, $ {nome[@]} se expande para nada. Se a expansão de aspas duplas ocorrer dentro de uma palavra, a expansão do primeiro parâmetro será unida à parte inicial da palavra original e a expansão do último parâmetro será unida à última parte da palavra original. Isso é análogo à expansão dos parâmetros especiais * e @ (consulte Parâmetros especiais acima). $ {#nome[subscrito]} se expande para o comprimento de $ {nome[subscrito ]}. Se subscript for * ou @, a expansão será o número de elementos na matriz. Se o subscrito usado para referenciar um elemento de uma matriz indexada for avaliado como um número menor que zero, ele será interpretado como relativo a um maior que o índice máximo da matriz, portanto, os índices negativos contam a partir do final da matriz e um índice de -1 faz referência ao último elemento.

Referenciar uma variável de array sem um subscrito é equivalente a referenciar o array com um subscrito de 0. Qualquer referência a uma variável usando um subscrito válido é legal, e o bash criará um array se necessário.

Uma variável de matriz é considerada definida se um valor foi atribuído a um subscrito. A string nula é um valor válido.

É possível obter as chaves (índices) de um array assim como os valores. $ {!nome[@]} e $ {!nome[*]} expande para os índices atribuídos na variável de matriz nome. O tratamento quando entre aspas duplas é semelhante à expansão dos parâmetros especiais @ e * entre aspas duplas.

O builtin unset é usado para destruir arrays. unset nome[subscript] destrói o elemento do array no índice subscript, para arrays indexados e associativos. Subscritos negativos para matrizes indexadas são interpretados conforme descrito acima. Desativar o último elemento de uma variável de array não desativa a variável. unset name, onde name é uma matriz, ou unset name[subscript], onde subscript é * ou @, remove toda a matriz.

Ao usar um nome de variável com um subscrito como um argumento para um comando, como com unset, sem usar a sintaxe de expansão de palavras descrita acima, o argumento está sujeito à expansão do nome do caminho. Se a expansão do nome do caminho não for desejada, o argumento deve ser colocado entre aspas.

Cada um dos builtins declarar, local e readonly aceita uma opção -a para especificar um array indexado e um -Uma opção para especificar uma matriz associativa. Se ambas as opções forem fornecidas, -A terá precedência. O builtin read aceita uma opção -a para atribuir uma lista de palavras lidas da entrada padrão para uma matriz. Os builtins set e declare exibem valores de matriz de uma forma que permite que sejam reutilizados como atribuições.

EXPANSÃO

A expansão é realizada na linha de comando após ter sido dividida em palavras. Existem sete tipos de expansão realizados: expansão de colchetes, expansão de til, expansão de parâmetro e variável, substituição de comando, expansão aritmética, divisão de palavras e expansão de nome de caminho.

A ordem das expansões é: expansão de contraventamento; expansão de til, expansão de parâmetro e variável, expansão aritmética e substituição de comando (feita da esquerda para a direita); divisão de palavras; e expansão do nome do caminho.

Em sistemas que podem suportá-lo, há uma expansão adicional disponível: substituição de processo. Isso é executado ao mesmo tempo que til, parâmetro, variável e expansão aritmética e substituição de comando.

Depois que essas expansões são executadas, as aspas presentes na palavra original são removidas, a menos que elas mesmas tenham sido citadas (remoção de aspas).

Somente expansão de colchetes, divisão de palavras e expansão de nome de caminho podem aumentar o número de palavras da expansão; outras expansões expandem uma única palavra para uma única palavra. As únicas exceções são as expansões de "$@" e "$ {nome[@]}" e, na maioria dos casos, $* e $ {nome[*]} conforme explicado acima (consulte PARÂMETROS).

Expansão da braçadeira

Expansão de colchetes é um mecanismo pelo qual strings arbitrárias podem ser geradas. Este mecanismo é semelhante à expansão do nome do caminho, mas os nomes dos arquivos gerados não precisam existir. Os padrões a serem expandidos entre colchetes assumem a forma de um preâmbulo opcional, seguido por uma série de strings separadas por vírgulas ou uma expressão de sequência entre um par de colchetes, seguido por um postscript opcional . O preâmbulo é prefixado para cada string contida entre chaves, e o postscript é anexado a cada string resultante, expandindo da esquerda para a direita.

As expansões de colchetes podem ser aninhadas. Os resultados de cada string expandida não são classificados; a ordem da esquerda para a direita é preservada. Por exemplo, a{d,c,b}e se expande para `ade ace abe'.

Uma expressão de sequência assume a forma {x..y[..<incr]}, onde x e y são números inteiros ou caracteres únicos e incr , um incremento opcional, é um número inteiro. Quando números inteiros são fornecidos, a expressão se expande para cada número entre x e y, inclusive. Os inteiros fornecidos podem ser prefixados com 0 para forçar cada termo a ter a mesma largura. Quando x ou y começa com um zero, o shell tenta forçar todos os termos gerados a conter o mesmo número de dígitos, preenchendo com zeros quando necessário. Quando os caracteres são fornecidos, a expressão se expande para cada caractere lexicograficamente entre x e y, inclusive, usando a localidade C padrão. Observe que x e y devem ser do mesmo tipo. Quando o incremento é fornecido, ele é usado como a diferença entre cada termo. O incremento padrão é 1 ou -1, conforme apropriado.

A expansão de colchetes é executada antes de qualquer outra expansão e quaisquer caracteres especiais para outras expansões são preservados no resultado. É estritamente textual. Bash não aplica nenhuma interpretação sintática ao contexto da expansão ou ao texto entre as chaves.

Uma expansão de chave formada corretamente deve conter chaves de abertura e fechamento sem aspas e pelo menos uma vírgula sem aspas ou uma expressão de sequência válida. Qualquer expansão de braçadeira formada incorretamente permanece inalterada. Um { ou , pode ser citado com uma barra invertida para evitar que seja considerado parte de uma expressão de chaves. Para evitar conflitos com a expansão de parâmetros, a string $ { não é considerada elegível para expansão de colchetes e inibe a expansão de colchetes até o fechamento }.

Essa construção é normalmente usada como abreviação quando o prefixo comum das strings a serem geradas é maior do que no exemplo acima:

mkdir /usr/local/src/bash/{old,new,dist,bugs}

ou

chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

A expansão de colchetes apresenta uma leve incompatibilidade com versões históricas de sh. sh não trata chaves de abertura ou fechamento especialmente quando elas aparecem como parte de uma palavra e as preserva na saída. Bash remove as chaves das palavras como consequência da expansão das chaves. Por exemplo, uma palavra inserida em sh como arquivo{1,2} aparece de forma idêntica na saída. A mesma palavra é gerada como arquivo1 arquivo2 após a expansão por bash. Se a compatibilidade estrita com sh for desejada, inicie bash com a opção +B ou desative a expansão de colchetes com +B para o comando set (consulte COMANDOS SHELL BUILTIN abaixo).

Expansão Til

Se uma palavra começa com um caractere til sem aspas (`~'), todos os caracteres que precedem a primeira barra sem aspas (ou todos os caracteres, se não houver barra sem aspas) são considerados um til -prefix. Se nenhum dos caracteres no prefixo do til estiver entre aspas, os caracteres no prefixo do til após o til serão tratados como um possível nome de login. Se esse nome de login for uma string nula, o til será substituído pelo valor do parâmetro shell HOME. Se HOME não estiver definido, o diretório inicial do usuário que está executando o shell será substituído. Caso contrário, o prefixo til será substituído pelo diretório inicial associado ao nome de login especificado.

Se o prefixo do til for `~+', o valor da variável shell PWD substituirá o prefixo do til. Se o prefixo do til for `~-', o valor da variável shell OLDPWD, se estiver definido, será substituído. Se os caracteres que seguem o til no prefixo do til consistem em um número N, opcionalmente prefixado por um `+' ou um `-', o prefixo do til é substituído pelo elemento correspondente do diretório pilha, como seria exibido pelo builtin dirs invocado com o prefixo til como um argumento. Se os caracteres após o til no prefixo do til consistirem em um número sem `+' ou `-' inicial, será assumido `+'.

Se o nome de login for inválido ou a expansão do til falhar, a palavra permanecerá inalterada.

Cada atribuição de variável é verificada quanto a prefixos de til sem aspas imediatamente após um : ou o primeiro =. Nesses casos, a expansão do til também é realizada. Conseqüentemente, pode-se usar nomes de arquivo com tils em atribuições para PATH, MAILPATH e CDPATH, e o shell atribui o valor expandido.

O Bash também executa expansão de til em palavras que satisfazem as condições de atribuições de variáveis (conforme descrito acima em PARÂMETROS) quando elas aparecem como argumentos para comandos simples. O Bash não faz isso, exceto para os comandos de declaração listados acima, quando no modo posix.

Expansão de Parâmetros

O caractere $ apresenta expansão de parâmetro, substituição de comando ou expansão aritmética. O nome do parâmetro ou símbolo a ser expandido pode ser colocado entre chaves, que são opcionais, mas servem para proteger a variável a ser expandida dos caracteres imediatamente posteriores a ela, que podem ser interpretados como parte do nome.

Quando chaves são usadas, a chave final correspondente é o primeiro `}' não escapado por uma barra invertida ou dentro de uma string entre aspas e não dentro de uma expansão aritmética incorporada, substituição de comando ou expansão de parâmetro.

${parameter}

O valor do parâmetro é substituído. As chaves são necessárias quando parâmetro é um parâmetro posicional com mais de um dígito, ou quando parâmetro é seguido por um caractere que não deve ser interpretado como parte de seu nome. O parâmetro é um parâmetro shell conforme descrito acima PARAMETERS) ou uma referência de array (Arrays).

Se o primeiro caractere de parâmetro for um ponto de exclamação (!) e parâmetro não for um nameref, ele introduz um nível de indireção. Bash usa o valor formado pela expansão do restante do parâmetro como o novo parâmetro; isso é expandido e esse valor é usado no restante da expansão, em vez da expansão do parâmetro original. Isso é conhecido como expansão indireta. O valor está sujeito à expansão de til, expansão de parâmetro, substituição de comando e expansão aritmética. Se parameter for um nameref, ele se expandirá para o nome do parâmetro referenciado por parameter em vez de executar a expansão indireta completa. As exceções são as expansões de $ {!prefixo*} e $ {! nome[@]} descrito abaixo. O ponto de exclamação deve seguir imediatamente a chave esquerda para introduzir a indireção.

Em cada um dos casos abaixo, palavra está sujeita a expansão de til, expansão de parâmetro, substituição de comando e expansão aritmética.

Ao não executar a expansão de substring, usando os formulários documentados abaixo (por exemplo, :-), o bash testa um parâmetro que não está definido ou é nulo. Omitir os dois pontos resulta em um teste apenas para um parâmetro que não está definido.

${parameter:-word}

Use valores padrão. Se o parâmetro não estiver definido ou for nulo, a expansão da palavra será substituída. Caso contrário, o valor do parâmetro é substituído.

${parameter:=word}

Atribuir valores padrão. Se parâmetro não estiver definido ou for nulo, a expansão de palavra é atribuída a parâmetro. O valor do parâmetro é então substituído. Parâmetros posicionais e parâmetros especiais não podem ser atribuídos desta forma.

${parameter:?word}

Exibir erro se for nulo ou não definido. Se parâmetro for nulo ou não definido, a expansão de palavra (ou uma mensagem nesse sentido se palavra não estiver presente) será gravada no padrão erro e o shell, se não for interativo, sai. Caso contrário, o valor do parâmetro é substituído.

${parameter:+word}

Usar valor alternativo. Se parâmetro for nulo ou não definido, nada será substituído, caso contrário, a expansão de palavra será substituída.

${parameter:offset}
${parameter:offset:length}

Expansão de substring. Expande até comprimento caracteres do valor do parâmetro começando no caractere especificado por offset. Se parâmetro for @, um array indexado subscrito por @ ou *, ou um nome de array associativo, os resultados diferem conforme descrito abaixo. Se comprimento for omitido, expande para a substring do valor de parâmetro começando no caractere especificado por offset e estendendo-se até o final do valor . comprimento e offset são expressões aritméticas (consulte AVALIAÇÃO ARITMÉTICA abaixo).

Se deslocamento for avaliado como um número menor que zero, o valor será usado como um deslocamento em caracteres a partir do final do valor do parâmetro. Se comprimento for avaliado como um número menor que zero, ele será interpretado como um deslocamento em caracteres do final do valor do parâmetro em vez de um número de caracteres, e a expansão são os caracteres entre offset e esse resultado. Observe que um deslocamento negativo deve ser separado dos dois pontos por pelo menos um espaço para evitar ser confundido com a expansão :-.

Se parâmetro for @, o resultado será comprimento parâmetros posicionais começando em offset. Um deslocamento negativo é obtido em relação a um maior que o maior parâmetro posicional, portanto, um deslocamento de -1 é avaliado como o último parâmetro posicional. É um erro de expansão se comprimento for avaliado como um número menor que zero.

Se parâmetro for um nome de array indexado subscrito por @ ou *, o resultado será o comprimento membros do array começando com $ {parâmetro [deslocamento]}. Um offset negativo é obtido em relação a um maior que o índice máximo da matriz especificada. É um erro de expansão se comprimento for avaliado como um número menor que zero.

A expansão de substring aplicada a uma matriz associativa produz resultados indefinidos.

A indexação de substring é baseada em zero, a menos que os parâmetros posicionais sejam usados, caso em que a indexação começa em 1 por padrão. Se offset for 0 e os parâmetros posicionais forem usados, $0 será prefixado na lista.

${!prefix*}
${!prefix@}

Nomes que correspondem ao prefixo. Expande para os nomes das variáveis cujos nomes começam com prefixo, separados pelo primeiro caractere do

Variável especial IFS. Quando @ é usado e a expansão aparece entre aspas duplas, cada nome de variável se expande para uma palavra separada.

${!name[@]}
${!name[*]}

Lista de chaves de array. Se nome for uma variável de matriz, expande para a lista de índices de matriz (chaves) atribuídos em nome. Se nome não for uma matriz, expande para 0 se nome estiver definido e nulo caso contrário. Quando @ é usado e a expansão aparece entre aspas duplas, cada tecla se expande para uma palavra separada.

${#parameter}

Comprimento do parâmetro. O comprimento em caracteres do valor do parâmetro é substituído. Se parâmetro for * ou @, o valor substituído é o número de parâmetros posicionais. Se parâmetro for um nome de array subscrito por * ou @, o valor substituído será o número de elementos no array. Se parâmetro for um nome de matriz indexado subscrito por um número negativo, esse número será interpretado como relativo a um maior que o índice máximo de parâmetro, portanto, os índices negativos contam a partir do final da matriz e um índice de -1 faz referência ao último elemento.

${parameter#word}
${parameter##word}

Remova o padrão de prefixo correspondente. A palavra é expandida para produzir um padrão exatamente como na expansão do nome do caminho e comparada com o valor expandido do parâmetro usando as regras descritas em Correspondência de padrões abaixo. Se o padrão corresponder ao início do valor de parâmetro, o resultado da expansão será o valor expandido de parâmetro com o padrão correspondente mais curto (o `` #'' caso) ou o padrão correspondente mais longo (o caso ``##'') excluído. Se parâmetro for @ ou *, a operação de remoção de padrão é aplicada a cada parâmetro posicional por vez e a expansão é a lista resultante. Se parâmetro for uma variável de matriz subscrita com @ ou *, a operação de remoção de padrão será aplicada a cada membro da matriz por vez, e o expansão é a lista resultante.

${parameter%word}
${parameter%%word}

Remova o padrão de sufixo correspondente. A palavra é expandida para produzir um padrão exatamente como na expansão do nome do caminho e comparada com o valor expandido do parâmetro usando as regras descritas em Correspondência de padrões abaixo. Se o padrão corresponder a uma parte final do valor expandido de parâmetro, o resultado da expansão é o valor expandido de parâmetro com o padrão correspondente mais curto (o ``%'' caso) ou o padrão correspondente mais longo (o caso ``%%'') excluído. Se parâmetro for @ ou *, a operação de remoção de padrão é aplicada a cada parâmetro posicional por vez e a expansão é a lista resultante. Se parâmetro for uma variável de matriz subscrita com @ ou *, a operação de remoção de padrão será aplicada a cada membro da matriz por vez, e o expansion é a lista resultante.

${parameter/pattern/string}

Substituição de padrão. O padrão é expandido para produzir um padrão assim como na expansão do nome do caminho, Parâmetro é expandido e a correspondência mais longa de padrão contra seu valor é substituída por cadeia. A correspondência é executada usando as regras descritas em Correspondência de padrões abaixo. Se padrão começar com /, todas as correspondências de padrão serão substituídas por string. Normalmente, apenas a primeira correspondência é substituída. Se padrão começar com #, ele deve corresponder ao início do valor expandido de parâmetro. Se padrão começar com %, ele deve corresponder ao final do valor expandido de parâmetro. Se string for nulo, as correspondências de padrão serão excluídas e o / seguinte padrão poderá ser omitido. Se a opção de shell nocasematch estiver habilitada, a correspondência será executada sem levar em conta a capitalização dos caracteres alfabéticos. Se parâmetro for @ ou *, a operação de substituição será aplicada a cada parâmetro posicional por vez e a expansão será a lista resultante. Se parâmetro for uma variável de array subscrita com @ ou *, a operação de substituição é aplicada a cada membro do array por vez, e a expansão é a lista resultante.

${parameter^pattern}
${parameter^^pattern}
${parameter,pattern}
${parameter,,pattern}

Modificação de caso. Esta expansão modifica o caso de caracteres alfabéticos em parâmetro. O padrão é expandido para produzir um padrão exatamente como na expansão do nome do caminho. Cada caractere no valor expandido de parâmetro é testado em relação ao padrão e, se corresponder ao padrão, seu caso é convertido. O padrão não deve tentar corresponder a mais de um caractere. O operador ^ converte letras minúsculas que correspondem ao padrão para maiúsculas; o operador , converte letras maiúsculas correspondentes em minúsculas. As expansões ^^ e ,, convertem cada caractere correspondente no valor expandido; as expansões ^ e , correspondem e convertem apenas o primeiro caractere no valor expandido. Se padrão for omitido, será tratado como um ?, que corresponde a todos os caracteres. Se parâmetro for @ ou *, a operação de modificação de caso é aplicada a cada parâmetro posicional por vez e a expansão é a lista resultante. Se parâmetro for uma variável de matriz subscrita com @ ou *, a operação de modificação de maiúsculas e minúsculas será aplicada a cada membro da matriz por vez, e o expansion é a lista resultante.

${parameter@operator}

Transformação de parâmetros. A expansão é uma transformação do valor do parâmetro ou informações sobre o próprio parâmetro, dependendo do valor do operator. Cada operador é uma única letra:

U

A expansão é uma string que é o valor do parâmetro com caracteres alfabéticos minúsculos convertidos em maiúsculos.

u

A expansão é uma string que é o valor do parâmetro com o primeiro caractere convertido para maiúsculo, se for alfabético.

L

A expansão é uma string que é o valor do parâmetro com caracteres alfabéticos maiúsculos convertidos em minúsculos.

Q

A expansão é uma string que é o valor do parâmetro citado em um formato que pode ser reutilizado como entrada.

E

A expansão é uma string que é o valor do parâmetro com sequências de escape de barra invertida expandidas como no mecanismo de aspas $'...'.

P

A expansão é uma string resultante da expansão do valor do parâmetro como se fosse uma string de prompt (consulte PROMPTING abaixo).

A

A expansão é uma string na forma de uma instrução de atribuição ou comando declare que, se avaliada, recriará parâmetro com seus atributos e valor.

K

Produz uma versão possivelmente entre aspas do valor do parâmetro, exceto que imprime os valores de matrizes indexadas e associativas como uma sequência de pares chave-valor entre aspas (consulte Matrizes acima ).

a

A expansão é uma string que consiste em valores de sinalizadores que representam os atributos de parâmetros.

Se parâmetro for @ ou *, a operação será aplicada a cada parâmetro posicional por vez e a expansão será a lista resultante. Se parâmetro for uma variável de matriz subscrita com @ ou *, a operação será aplicada a cada membro da matriz por vez e a expansão será a lista resultante.

O resultado da expansão está sujeito à divisão de palavras e à expansão do nome do caminho, conforme descrito abaixo.

Substituição de comando

Substituição de comando permite a saída de um comando para substituir o nome do comando. Existem duas formas:

$(command )

ou

`command`

Bash executa a expansão executando comando em um ambiente de subshell e substituindo a substituição do comando pela saída padrão do comando, com todas as novas linhas à direita excluídas. As novas linhas incorporadas não são excluídas, mas podem ser removidas durante a divisão de palavras. A substituição do comando $ (cat arquivo) pode ser substituída pelo equivalente, mas mais rápido, $ (< arquivo).

Quando a forma antiga de substituição de aspas invertidas é usada, a barra invertida retém seu significado literal, exceto quando seguida por $, ` ou \. A primeira aspas invertidas não precedida por uma barra invertida encerra a substituição do comando. Ao usar o formulário $ ( comando ), todos os caracteres entre parênteses compõem o comando; nenhum é tratado de forma especial.

As substituições de comando podem ser aninhadas. Para aninhar ao usar o formulário com aspas invertidas, escape as aspas internas com barras invertidas.

Se a substituição aparecer entre aspas duplas, a divisão de palavras e a expansão do nome do caminho não serão executadas nos resultados.

Expansão Aritmética

A expansão aritmética permite a avaliação de uma expressão aritmética e a substituição do resultado. O formato para expansão aritmética é:

$((expression))

A expressão é tratada como se estivesse entre aspas duplas, mas uma aspa dupla entre parênteses não é tratada de forma especial. Todos os tokens na expressão passam por expansão de parâmetro e variável, substituição de comando e remoção de aspas. O resultado é tratado como a expressão aritmética a ser avaliada. As expansões aritméticas podem ser aninhadas.

A avaliação é realizada de acordo com as regras listadas abaixo em AVALIAÇÃO ARITMÉTICA. Se expressão for inválida, bash imprime uma mensagem indicando falha e nenhuma substituição ocorre.

Substituição de processo

Substituição de processo permite que a entrada ou saída de um processo seja referida usando um nome de arquivo. Ele assume a forma de <(lista ) ou >(lista ). O processo lista é executado de forma assíncrona e sua entrada ou saída aparece como um nome de arquivo. Este nome de arquivo é passado como um argumento para o comando atual como resultado da expansão. Se o formulário >(lista ) for usado, gravar no arquivo fornecerá entrada para lista. Se for usado o formulário <(lista ), o arquivo passado como argumento deve ser lido para obter a saída de lista. A substituição de processo é suportada em sistemas que suportam pipes nomeados (FIFOs) ou o método /dev/fd de nomear arquivos abertos.

Quando disponível, a substituição do processo é executada simultaneamente com a expansão de parâmetro e variável, substituição de comando e expansão aritmética.

Divisão de palavras

O shell verifica os resultados da expansão de parâmetro, substituição de comando e expansão aritmética que não ocorreu entre aspas duplas para divisão de palavras.

O shell trata cada caractere de IFS como um delimitador e divide os resultados das outras expansões em palavras usando esses caracteres como terminadores de campo. Se IFS não estiver definido ou seu valor for exatamente <space><tab><newline>, o padrão, as sequências de <space> , <tab> e <newline> no início e no final dos resultados das expansões anteriores são ignorados e qualquer sequência de IFS caracteres que não estão no início ou no final servem para delimitar as palavras. Se IFS tiver um valor diferente do padrão, as sequências dos caracteres de espaço em branco espaço, tab e nova linha são ignorados no início e no final da palavra, desde que o caractere de espaço em branco esteja no valor de IFS (um caractere de espaço em branco IFS). Qualquer caractere em IFS que não seja um espaço em branco IFS, junto com qualquer caractere de espaço em branco IFS adjacente, delimita um campo. Uma sequência de caracteres de espaço em branco IFS também é tratada como um delimitador. Se o valor de IFS for nulo, não ocorrerá nenhuma divisão de palavras.

Argumentos nulos explícitos ( " " ou  ' ' ) são retidos e passados para comandos como strings vazias. Argumentos nulos implícitos sem aspas, resultantes da expansão de parâmetros que não possuem valores, são removidos. Se um parâmetro sem valor for expandido entre aspas duplas, um argumento nulo resulta e é retido e passado para um comando como uma string vazia. Quando um argumento nulo entre aspas aparece como parte de uma palavra cuja expansão não é nula, o argumento nulo é removido. Ou seja, a palavra -d' ' torna-se -d após a divisão da palavra e a remoção do argumento nulo.

Observe que, se não ocorrer expansão, nenhuma divisão será executada.

Expansão do nome do caminho

Após a divisão de palavras, a menos que a opção -f tenha sido definida, bash verifica cada palavra em busca dos caracteres *, ? e [. Se um desses caracteres aparecer e não estiver entre aspas, a palavra será considerada um padrão e substituída por uma lista classificada alfabeticamente de nomes de arquivos correspondentes ao padrão (consulte Correspondência de padrões abaixo). Se nenhum nome de arquivo correspondente for encontrado e a opção de shell nullglob não estiver habilitada, a palavra permanecerá inalterada. Se a opção nullglob for definida e nenhuma correspondência for encontrada, a palavra será removida. Se a opção de shell failglob for definida e nenhuma correspondência for encontrada, uma mensagem de erro será impressa e o comando não será executado. Se a opção de shell nocaseglob estiver habilitada, a correspondência será executada sem levar em conta a capitalização dos caracteres alfabéticos. Quando um padrão é usado para expansão de nome de caminho, o caractere ``.'' no início de um nome ou imediatamente após uma barra deve ser correspondido explicitamente, a menos que a opção shell dotglob está definido. Os nomes de arquivo ``.'' e ``..'' sempre devem ser correspondidos explicitamente, mesmo se dotglob estiver definido. Em outros casos, o caractere ``.'' não é tratado de forma especial. Ao corresponder a um nome de caminho, o caractere de barra sempre deve ser correspondido explicitamente por uma barra no padrão, mas em outros contextos de correspondência, ele pode ser correspondido por um caractere de padrão especial, conforme descrito abaixo em Correspondência de padrão. Veja a descrição de shopt abaixo em SHELL BUILTIN COMMANDS para obter uma descrição de nocaseglob, nullglob, failglob e opções de shell dotglob.

A variável de shell GLOBIGNORE pode ser usada para restringir o conjunto de nomes de arquivos correspondentes a um padrão. Se GLOBIGNORE for definido, cada nome de arquivo correspondente que também corresponda a um dos padrões em GLOBIGNORE será removido da lista de correspondências. Se a opção nocaseglob for definida, a comparação com os padrões em GLOBIGNORE é realizada sem levar em consideração a caixa. Os nomes de arquivo . e .. são sempre ignorados quando GLOBIGNORE é definido e não nulo. No entanto, definir GLOBIGNORE para um valor não nulo tem o efeito de habilitar a opção de shell dotglob, portanto, todos os outros nomes de arquivo que começam com . serão corresponder. Para obter o antigo comportamento de ignorar nomes de arquivo começando com ., torne .* um dos padrões em GLOBIGNORE. A opção dotglob é desativada quando

GLOBIGNORE não está definido. A correspondência de padrões respeita a configuração da opção de shell extglob.

Correspondência de padrões

Qualquer caractere que apareça em um padrão, exceto os caracteres de padrão especial descritos abaixo, corresponderá a si mesmo. O caractere NUL pode não ocorrer em um padrão. Uma barra invertida escapa do caractere seguinte; a barra invertida de escape é descartada durante a correspondência. Os caracteres de padrão especial devem ser colocados entre aspas se forem correspondidos literalmente.

Os caracteres de padrão especial têm os seguintes significados:

*

Corresponde a qualquer string, incluindo a string nula. Quando a opção de shell globstar está ativada e * é usado em um contexto de expansão de nome de caminho, dois * adjacentes usados como um único padrão corresponderão todos os arquivos e zero ou mais diretórios e subdiretórios. Se seguido por um /, dois *s adjacentes corresponderão apenas a diretórios e subdiretórios.

?

Corresponde a qualquer caractere único.

[...]

Corresponde a qualquer um dos caracteres incluídos. Um par de caracteres separados por um hífen denota uma expressão de intervalo; qualquer caractere que esteja entre esses dois caracteres, inclusive, usando a sequência de intercalação e o conjunto de caracteres da localidade atual, é correspondido. Se o primeiro caractere após [ for um ! ou um ^, qualquer caractere não incluído será correspondido. A ordem de classificação dos caracteres nas expressões de intervalo é determinada pela localidade atual e pelos valores das variáveis de shell LC_COLLATE ou LC_ALL, se definidas. Para obter a interpretação tradicional de expressões de intervalo, onde [a-d] é equivalente a [abcd], defina o valor da variável shell LC_ALL como C ou ative a opção de shell globasciiranges. Um - pode ser correspondido incluindo-o como o primeiro ou o último caractere no conjunto. Um ] pode ser correspondido incluindo-o como o primeiro caractere no conjunto.

Dentro de [ e ], classes de caracteres podem ser especificadas usando a sintaxe [:classe :], onde class é uma das seguintes classes definidas no padrão POSIX:

alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit

Uma classe de personagem corresponde a qualquer personagem pertencente a essa classe. A classe de caracteres palavra corresponde a letras, dígitos e o caractere _.

Dentro de [ e ], uma classe de equivalência pode ser especificada usando a sintaxe [=c=], que corresponde a todos os caracteres com o mesmo peso de agrupamento (conforme definido pela localidade atual) que o caractere c.

Dentro de [ e ], a sintaxe [.símbolo.] corresponde ao agrupamento símbolo símbolo.

Se a opção de shell extglob for habilitada usando o shopt integrado, vários operadores de correspondência de padrão estendido serão reconhecidos. Na descrição a seguir, uma lista de padrões é uma lista de um ou mais padrões separados por |. Padrões compostos podem ser formados usando um ou mais dos seguintes subpadrões:

?( pattern-list )

Corresponde a zero ou uma ocorrência dos padrões fornecidos

*( pattern-list )

Corresponde a zero ou mais ocorrências dos padrões fornecidos

+( pattern-list )

Corresponde a uma ou mais ocorrências dos padrões fornecidos

@( pattern-list )

Corresponde a um dos padrões fornecidos

!( pattern-list )

Corresponde a qualquer coisa, exceto um dos padrões fornecidos

A correspondência de padrão estendida complicada em strings longas é lenta, especialmente quando os padrões contêm alternâncias e as strings contêm várias correspondências. Usar correspondências separadas em strings mais curtas ou usar matrizes de strings em vez de uma única string longa pode ser mais rápido.

Remoção de cotação

Após as expansões anteriores, todas as ocorrências sem aspas dos caracteres \, ' e  "  que não resultaram de uma das expansões acima são removidas.

REDIRECIONAMENTO

Antes de um comando ser executado, sua entrada e saída podem ser redirecionadas usando uma notação especial interpretada pelo shell. O redirecionamento permite que os manipuladores de arquivo dos comandos sejam duplicados, abertos, fechados, feitos para se referir a arquivos diferentes e pode alterar os arquivos dos quais o comando lê e grava. O redirecionamento também pode ser usado para modificar os manipuladores de arquivo no ambiente de execução do shell atual. Os seguintes operadores de redirecionamento podem preceder ou aparecer em qualquer lugar dentro de um comando simples ou podem seguir um comando. Os redirecionamentos são processados na ordem em que aparecem, da esquerda para a direita.

Cada redirecionamento que pode ser precedido por um número de descritor de arquivo pode ser precedido por uma palavra no formato {varname}. Nesse caso, para cada operador de redirecionamento, exceto >&- e <&-, o shell alocará um descritor de arquivo maior ou igual a 10 e o atribuirá a varname. Se >&- ou <&- for precedido por {varname}, o valor de varname define o descritor de arquivo a ser fechado. Se {varname} for fornecido, o redirecionamento persiste além do escopo do comando, permitindo que o programador de shell gerencie ele mesmo o descritor de arquivo.

Nas descrições a seguir, se o número do descritor de arquivo for omitido e o primeiro caractere do operador de redirecionamento for <, o redirecionamento se refere à entrada padrão (descritor de arquivo 0). Se o primeiro caractere do operador de redirecionamento for >, o redirecionamento se refere à saída padrão (descritor de arquivo 1).

A palavra após o operador de redirecionamento nas descrições a seguir, salvo indicação em contrário, está sujeita à expansão de colchetes, expansão de til, expansão de parâmetro e variável, substituição de comando, expansão aritmética, remoção de aspas, expansão de nome de caminho e divisão de palavra. Se expandir para mais de uma palavra, bash relata um erro.

Observe que a ordem dos redirecionamentos é significativa. Por exemplo, o comando

ls > dirlist 2>&1

direciona a saída padrão e o erro padrão para o arquivo dirlist, enquanto o comando

ls 2>&1 > dirlist

direciona apenas a saída padrão para o arquivo dirlist, porque o erro padrão foi duplicado da saída padrão antes que a saída padrão fosse redirecionada para dirlist.

Bash manipula vários nomes de arquivos especialmente quando são usados em redirecionamentos, conforme descrito na tabela a seguir. Se o sistema operacional no qual o bash está sendo executado fornecer esses arquivos especiais, o bash os usará; caso contrário, ele os emulará internamente com o comportamento descrito abaixo.

/dev/fd/fd

Se fd for um número inteiro válido, o descritor de arquivo fd será duplicado.

/dev/stdin

O descritor de arquivo 0 está duplicado.

/dev/stdout

O descritor de arquivo 1 está duplicado.

/dev/stderr

O descritor de arquivo 2 está duplicado.

/dev/tcp/host/port

Se host for um nome de host ou endereço de Internet válido e port for um número inteiro de porta ou nome de serviço, bash tentará abrir o soquete TCP correspondente .

/dev/udp/host/port

Se host for um nome de host ou endereço de Internet válido e port for um número inteiro de porta ou nome de serviço, bash tentará abrir o soquete UDP correspondente .

Uma falha ao abrir ou criar um arquivo faz com que o redirecionamento falhe.

Redirecionamentos usando descritores de arquivo maiores que 9 devem ser usados com cuidado, pois podem entrar em conflito com os descritores de arquivo que o shell usa internamente.

Entrada de redirecionamento

O redirecionamento da entrada faz com que o arquivo cujo nome resulta da expansão da palavra seja aberto para leitura no descritor de arquivo n, ou na entrada padrão (descritor de arquivo 0) se n não é especificado.

O formato geral para redirecionar a entrada é:

[n]<word

Saída de redirecionamento

O redirecionamento de saída faz com que o arquivo cujo nome resulta da expansão de palavra seja aberto para gravação no descritor de arquivo n, ou na saída padrão (descritor de arquivo 1) se n não é especificado. Se o arquivo não existir, ele será criado; se existir, será truncado para o tamanho zero.

O formato geral para redirecionar a saída é:

[n]>word

Se o operador de redirecionamento for > e a opção noclobber para o conjunto interno tiver sido ativada, o redirecionamento falhará se o arquivo cujo nome resulta da expansão de word existe e é um arquivo regular. Se o operador de redirecionamento for >| ou o operador de redirecionamento for > e a opção noclobber para o set integrado comando não estiver ativado, o redirecionamento será tentado mesmo se o arquivo nomeado por palavra existir.

Anexando saída redirecionada

O redirecionamento da saída dessa maneira faz com que o arquivo cujo nome resulta da expansão da palavra seja aberto para anexar no descritor de arquivo n ou na saída padrão (descritor de arquivo 1) se n não for especificado. Se o arquivo não existir, ele será criado.

O formato geral para anexar a saída é:

[n]>>word

Redirecionando Saída Padrão e Erro Padrão

Essa construção permite que tanto a saída padrão (descritor de arquivo 1) quanto a saída de erro padrão (descritor de arquivo 2) sejam redirecionadas para o arquivo cujo nome é a expansão de palavra.

Existem dois formatos para redirecionar a saída padrão e o erro padrão:

&>word

e

>&word

Das duas formas, a primeira é a preferida. Isso é semanticamente equivalente a

>word 2>&1

Ao usar a segunda forma, palavra pode não se expandir para um número ou -. Em caso afirmativo, outros operadores de redirecionamento se aplicam (consulte Duplicando descritores de arquivo abaixo) por motivos de compatibilidade.

Anexando Saída Padrão e Erro Padrão

Essa construção permite que tanto a saída padrão (descritor de arquivo 1) quanto a saída de erro padrão (descritor de arquivo 2) sejam anexadas ao arquivo cujo nome é a expansão de palavra.

O formato para anexar saída padrão e erro padrão é:

&>>word

Isso é semanticamente equivalente a

>>word 2>&1

(consulte Duplicando descritores de arquivo abaixo).

Aqui Documentos

Este tipo de redirecionamento instrui o shell a ler a entrada da fonte atual até que uma linha contendo apenas delimitador (sem espaços em branco à direita) seja vista. Todas as linhas lidas até aquele ponto são usadas como entrada padrão (ou descritor de arquivo n se n for especificado) para um comando.

O formato de here-documents é:

[n]<<[-]word
        here-document
delimiter

Nenhuma expansão de parâmetro e variável, substituição de comando, expansão aritmética ou expansão de nome de caminho é executada na palavra. Se qualquer parte de palavra estiver entre aspas, o delimitador é o resultado da remoção de aspas em palavra e as linhas no documento aqui não são expandido. Se palavra não estiver entre aspas, todas as linhas do documento aqui estão sujeitas à expansão de parâmetros, substituição de comando e expansão aritmética, a sequência de caracteres \<newline> é ignorada e \ deve ser usado para citar os caracteres \, $ e `.

Se o operador de redirecionamento for <<-, todos os caracteres de tabulação iniciais serão removidos das linhas de entrada e da linha que contém o delimitador. Isso permite que here-documents dentro de scripts de shell sejam recuados de maneira natural.

Aqui Cordas

Uma variante dos documentos aqui, o formato é:

[n]<<<word

A palavra sofre expansão de til, expansão de parâmetro e variável, substituição de comando, expansão aritmética e remoção de aspas. A expansão do nome do caminho e a divisão de palavras não são executadas. O resultado é fornecido como uma única string, com uma nova linha anexada, ao comando em sua entrada padrão (ou descritor de arquivo n se n for especificado).

Duplicando Descritores de Arquivo

O operador de redirecionamento

[n]<&word

é usado para duplicar descritores de arquivo de entrada. Se palavra se expandir para um ou mais dígitos, o descritor de arquivo indicado por n será uma cópia desse descritor de arquivo. Se os dígitos em palavra não especificarem um descritor de arquivo aberto para entrada, ocorrerá um erro de redirecionamento. Se palavra for avaliada como -, o descritor de arquivo n será fechado. Se n não for especificado, a entrada padrão (descritor de arquivo 0) será usada.

O operador

[n]>&word

é usado de forma semelhante para duplicar os descritores de arquivo de saída. Se n não for especificado, a saída padrão (descritor de arquivo 1) será usada. Se os dígitos em palavra não especificarem um descritor de arquivo aberto para saída, ocorrerá um erro de redirecionamento. Se palavra for avaliada como -, o descritor de arquivo n será fechado. Como um caso especial, se n for omitido e palavra não se expandir para um ou mais dígitos ou -, a saída padrão e o erro padrão são redirecionados conforme descrito anteriormente.

Descritores de arquivos em movimento

O operador de redirecionamento

[n]<&digit-

move o descritor de arquivo dígito para o descritor de arquivo n, ou a entrada padrão (descritor de arquivo 0) se n não for especificado. dígito é fechado após ser duplicado para n.

Da mesma forma, o operador de redirecionamento

[n]>&digit-

move o descritor de arquivo dígito para o descritor de arquivo n, ou a saída padrão (descritor de arquivo 1) se n não for especificado.

Abrindo Descritores de Arquivo para Leitura e Escrita

O operador de redirecionamento

[n]<>word

faz com que o arquivo cujo nome é a expansão de palavra seja aberto tanto para leitura quanto para escrita no descritor de arquivo n, ou no descritor de arquivo 0 se n não é especificado. Se o arquivo não existir, ele será criado.

APELIDO

Aliases permitem que uma string seja substituída por uma palavra quando ela é usada como a primeira palavra de um comando simples. O shell mantém uma lista de aliases que podem ser definidos e desdefinidos com os comandos internos alias e unalias (consulte COMANDOS CONSTRUÍDOS SHELL abaixo). A primeira palavra de cada comando simples, se não estiver entre aspas, é verificada para ver se possui um alias. Nesse caso, essa palavra é substituída pelo texto do alias. Os caracteres /, $, ` e = e qualquer um dos metacaracteres do shell ou os caracteres entre aspas listados acima podem não aparecer em um nome de alias. O texto de substituição pode conter qualquer entrada de shell válida, incluindo metacaracteres de shell. A primeira palavra do texto de substituição é testada para aliases, mas uma palavra idêntica a um alias que está sendo expandido não é expandida uma segunda vez. Isso significa que pode-se alias ls para ls -F, por exemplo, e bash não tenta expandir recursivamente o texto de substituição. Se o último caractere do valor do alias for em branco, a próxima palavra de comando após o alias também será verificada quanto à expansão do alias.

Aliases são criados e listados com o comando alias e removidos com o comando unalias.

Não há mecanismo para usar argumentos no texto de substituição. Se forem necessários argumentos, uma função shell deve ser usada (consulte FUNÇÕES abaixo).

Aliases não são expandidos quando o shell não é interativo, a menos que a opção de shell expand_aliases seja definida usando shopt (consulte a descrição de shopt em COMANDOS CONSTRUÍDOS SHELL abaixo).

As regras relativas à definição e uso de pseudônimos são um tanto confusas. Bash sempre lê pelo menos uma linha completa de entrada e todas as linhas que compõem um comando composto, antes de executar qualquer um dos comandos nessa linha ou no comando composto. Os aliases são expandidos quando um comando é lido, não quando é executado. Portanto, uma definição de alias que aparece na mesma linha de outro comando não entra em vigor até que a próxima linha de entrada seja lida. Os comandos que seguem a definição do alias nessa linha não são afetados pelo novo alias. Esse comportamento também é um problema quando as funções são executadas. Os aliases são expandidos quando uma definição de função é lida, não quando a função é executada, porque a própria definição de função é um comando. Como consequência, os aliases definidos em uma função não estão disponíveis até que a função seja executada. Por segurança, sempre coloque as definições de alias em uma linha separada e não use alias em comandos compostos.

Para quase todos os propósitos, aliases são substituídos por funções de shell.

FUNÇÕES

Uma função shell, definida conforme descrito acima em SHELL GRAMMAR, armazena uma série de comandos para execução posterior. Quando o nome de uma função shell é usado como um nome de comando simples, a lista de comandos associados a esse nome de função é executada. As funções são executadas no contexto do shell atual; nenhum novo processo é criado para interpretá-los (compare isso com a execução de um shell script). Quando uma função é executada, os argumentos da função tornam-se os parâmetros posicionais durante sua execução. O parâmetro especial # é atualizado para refletir a alteração. O parâmetro especial 0 permanece inalterado. O primeiro elemento da variável FUNCNAME é definido como o nome da função durante a execução da função.

Todos os outros aspectos do ambiente de execução do shell são idênticos entre uma função e seu chamador com estas exceções: as armadilhas DEBUG e RETURN (veja a descrição da armadilha trap< embutido em SHELL BUILTIN COMMANDS abaixo) não são herdados, a menos que a função tenha recebido o atributo trace (consulte a descrição do declarar builtin abaixo) ou a opção de shell -o functrace foi ativada com o builtin set (neste caso, todas as funções herdam DEBUG e RETURN traps), e o trap ERR não é herdado, a menos que a opção shell -o errtrace tenha sido habilitada.

As variáveis locais para a função podem ser declaradas com o comando interno local. Normalmente, as variáveis e seus valores são compartilhados entre a função e seu chamador. Se uma variável for declarada local, o escopo visível da variável é restrito a essa função e seus filhos (incluindo as funções que ela chama). Variáveis locais "sombra" variáveis com o mesmo nome declarado em escopos anteriores. Por exemplo, uma variável local declarada em uma função esconde uma variável global de mesmo nome: referências e atribuições referem-se à variável local, deixando a variável global inalterada. Quando a função retornar, a variável global estará novamente visível.

O shell usa escopo dinâmico para controlar a visibilidade de uma variável dentro das funções. Com o escopo dinâmico, as variáveis visíveis e seus valores são resultado da sequência de chamadas de função que fizeram com que a execução chegasse à função atual. O valor de uma variável que uma função vê depende de seu valor dentro de seu chamador, se houver, seja esse chamador o escopo "global" ou outra função shell. Este também é o valor que uma declaração de variável local "sombra" e o valor que é restaurado quando a função retorna.

Por exemplo, se uma variável var for declarada como local na função func1 e func1 chamar outra função func2, referências a var feitas de dentro de func2 serão resolvidas para a variável local var de func1, sombreando qualquer variável global nomeada var.

O builtin unset também atua usando o mesmo escopo dinâmico: se uma variável for local para o escopo atual, unset irá desmarcá-la; caso contrário, o unset se referirá à variável encontrada em qualquer escopo de chamada, conforme descrito acima. Se uma variável no escopo local atual não for definida, ela permanecerá assim até que seja redefinida nesse escopo ou até que a função retorne. Depois que a função retornar, qualquer instância da variável em um escopo anterior ficará visível. Se o unset atuar em uma variável em um escopo anterior, qualquer instância de uma variável com esse nome que tenha sido sombreada se tornará visível.

A variável FUNCNEST, se definida como um valor numérico maior que 0, define um nível máximo de aninhamento de função. Chamadas de função que excedem o limite fazem com que todo o comando seja abortado.

Se o comando interno retornar for executado em uma função, a função será concluída e a execução será retomada com o próximo comando após a chamada da função. Qualquer comando associado à armadilha RETURN é executado antes da retomada da execução. Quando uma função é concluída, os valores dos parâmetros posicionais e do parâmetro especial # são restaurados aos valores que tinham antes da execução da função.

Nomes e definições de função podem ser listados com a opção -f para os comandos internos declare ou typeset. A opção -F para declarar ou compor listará apenas os nomes das funções (e opcionalmente o arquivo de origem e o número da linha, se o opção de shell extdebug está habilitada). As funções podem ser exportadas para que os subshells as tenham automaticamente definidas com a opção -f para o export integrado. Uma definição de função pode ser excluída usando a opção -f para o builtin unset.

Funções podem ser recursivas. A variável FUNCNEST pode ser usada para limitar a profundidade da pilha de chamada de função e restringir o número de invocações de função. Por padrão, nenhum limite é imposto ao número de chamadas recursivas.

AVALIAÇÃO ARITMÉTICA

O shell permite que expressões aritméticas sejam avaliadas, sob certas circunstâncias (veja os comandos internos let e declare, o comando (( composto e Expansão aritmética). A avaliação é feita em inteiros de largura fixa sem verificação de estouro, embora a divisão por 0 seja capturada e sinalizada como um erro. Os operadores e sua precedência, associatividade e valores são os mesmos que na linguagem C. A seguinte lista de operadores é agrupada em níveis de operadores de igual precedência. Os níveis são listados em ordem decrescente de precedência.

id++ id--

variável pós-incremento e pós-decremento

- +

unário menos e mais

++id --id

variável pré-incremento e pré-decremento

! ~

negação lógica e bit a bit

**

exponenciação

* / %

multiplicação, divisão, resto

+ -

adição subtração

<< >>

deslocamentos bit a bit esquerdo e direito

<= >= < >

comparação

== !=

igualdade e desigualdade

&

bit a bit AND

^

OR exclusivo bit a bit

|

OU bit a bit

&&

E lógico

||

OU lógico

expr?expr:expr

operador condicional

= *= /= %= += -= <<= >>= &= ^= |=

atribuição

expr1 , expr2

vírgula

Variáveis de shell são permitidas como operandos; a expansão do parâmetro é executada antes que a expressão seja avaliada. Dentro de uma expressão, as variáveis de shell também podem ser referenciadas por nome sem usar a sintaxe de expansão de parâmetro. Uma variável de shell que é nula ou não definida é avaliada como 0 quando referenciada por nome sem usar a sintaxe de expansão de parâmetro. O valor de uma variável é avaliado como uma expressão aritmética quando ela é referenciada, ou quando uma variável que recebeu o atributo integer usando declare -i recebe um valor. Um valor nulo é avaliado como 0. Uma variável de shell não precisa ter seu atributo integer ativado para ser usado em uma expressão.

Constantes inteiras seguem a definição da linguagem C, sem sufixos ou constantes de caracteres. Constantes com um 0 à esquerda são interpretadas como números octais. Um 0x ou 0X inicial denota hexadecimal. Caso contrário, os números assumem a forma [base#]n, onde a base opcional é um número decimal entre 2 e 64 que representa a base aritmética e n é um número nessa base. Se base# for omitido, a base 10 será usada. Ao especificar n, se for necessário um não dígito, os dígitos maiores que 9 são representados pelas letras minúsculas, maiúsculas, @ e _, nessa ordem. Se base for menor ou igual a 36, letras maiúsculas e minúsculas podem ser usadas alternadamente para representar números entre 10 e 35.

Os operadores são avaliados em ordem de precedência. As subexpressões entre parênteses são avaliadas primeiro e podem substituir as regras de precedência acima.

EXPRESSÕES CONDICIONAIS

Expressões condicionais são usadas pelo comando composto [[ e pelos comandos internos test e [ para testar atributos de arquivo e realizar comparações aritméticas e de cadeia de caracteres. Os comandos test e [ determinam seu comportamento com base no número de argumentos; consulte as descrições desses comandos para quaisquer outras ações específicas de comando.

As expressões são formadas a partir das seguintes primárias unárias ou binárias. Bash lida com vários nomes de arquivos especialmente quando eles são usados em expressões. Se o sistema operacional no qual o bash está sendo executado fornecer esses arquivos especiais, o bash os usará; caso contrário, ele irá emulá-los internamente com este comportamento: Se qualquer argumento arquivo para um dos primários estiver no formato /dev/fd/n, então o descritor de arquivo n está marcado. Se o argumento arquivo para um dos primários for /dev/stdin, /dev/stdout ou /dev/ stderr, descritor de arquivo 0, 1 ou 2, respectivamente, é verificado.

A menos que especificado de outra forma, as primárias que operam em arquivos seguem links simbólicos e operam no destino do link, em vez do próprio link.

Quando usados com [[, os operadores < e > classificam lexicograficamente usando a localidade atual. O comando test classifica usando a ordem ASCII.

-a file

Verdadeiro se arquivo existir.

-b file

Verdadeiro se arquivo existir e for um arquivo especial de bloco.

-c file

Verdadeiro se arquivo existir e for um arquivo especial de caractere.

-d file

Verdadeiro se arquivo existir e for um diretório.

-e file

Verdadeiro se arquivo existir.

-f file

Verdadeiro se arquivo existir e for um arquivo normal.

-g file

Verdadeiro se arquivo existir e for set-group-id.

-h file

Verdadeiro se arquivo existir e for um link simbólico.

-k file

Verdadeiro se arquivo existir e seu bit ``adesivo'' estiver definido.

-p file

Verdadeiro se arquivo existir e for um pipe nomeado (FIFO).

-r file

Verdadeiro se arquivo existir e for legível.

-s file

Verdadeiro se arquivo existir e tiver um tamanho maior que zero.

-t fd

Verdadeiro se o descritor de arquivo fd estiver aberto e se referir a um terminal.

-u file

Verdadeiro se arquivo existir e seu bit set-user-id estiver definido.

-w file

Verdadeiro se arquivo existir e for gravável.

-x file

Verdadeiro se arquivo existir e for executável.

-G file

Verdadeiro se arquivo existir e pertencer ao ID do grupo efetivo.

-L file

Verdadeiro se arquivo existir e for um link simbólico.

-N file

Verdadeiro se arquivo existir e tiver sido modificado desde a última leitura.

-O file

Verdadeiro se arquivo existir e pertencer ao id de usuário efetivo.

-S file

Verdadeiro se arquivo existir e for um soquete.

file1 -ef file2

Verdadeiro se arquivo1 e arquivo2 se referirem ao mesmo dispositivo e números de inode.

file1 -nt file2

Verdadeiro se arquivo1 for mais recente (de acordo com a data de modificação) que arquivo2 ou se arquivo1 existir e arquivo2 não .

file1 -ot file2

Verdadeiro se arquivo1 for mais antigo que arquivo2 ou se arquivo2 existir e arquivo1 não.

-o optname

True se a opção de shell optname estiver habilitada. Veja a lista de opções na descrição da opção -o para o set integrado abaixo.

-v varname

Verdadeiro se a variável de shell varname estiver definida (foi atribuído um valor).

-R varname

True se a variável de shell varname estiver definida e for uma referência de nome.

-z string

Verdadeiro se o comprimento da string for zero.

string
-n string

Verdadeiro se o comprimento da string for diferente de zero.

string1 == string2
string1 = string2

Verdadeiro se as strings forem iguais. = deve ser usado com o comando test para conformidade POSIX. Quando usado com o comando [[, executa a correspondência de padrão conforme descrito acima (Comandos compostos).

string1 != string2

Verdadeiro se as strings não forem iguais.

string1 < string2

Verdadeiro se string1 for classificado lexicograficamente antes de string2.

string1 > string2

Verdadeiro se string1 for classificado após string2 lexicograficamente.

arg1 OP arg2

OP é um dos -eq, -ne, -lt, -le , -gt ou -ge. Esses operadores binários aritméticos retornam verdadeiro se arg1 for igual a, diferente de, menor que, menor que ou igual a, maior que ou maior que ou igual a arg2, respectivamente. Arg1 e arg2 podem ser inteiros positivos ou negativos. Quando usado com o comando [[, Arg1 e Arg2 são avaliados como expressões aritméticas (consulte AVALIAÇÃO ARITMÉTICA acima) .

EXPANSÃO DE COMANDO SIMPLES

Quando um comando simples é executado, o shell realiza as seguintes expansões, atribuições e redirecionamentos, da esquerda para a direita, na seguinte ordem.

  1. As palavras que o analisador marcou como atribuições de variáveis (aquelas que precedem o nome do comando) e os redirecionamentos são salvos para processamento posterior.

  2. As palavras que não são atribuições variáveis ou redirecionamentos são expandidas. Se alguma palavra permanecer após a expansão, a primeira palavra será considerada o nome do comando e as palavras restantes serão os argumentos.

  3. Os redirecionamentos são executados conforme descrito acima em REDIRECIONAMENTO.

  1. O texto após = em cada atribuição de variável passa por expansão de til, expansão de parâmetro, substituição de comando, expansão aritmética e remoção de aspas antes de ser atribuído à variável.

Se nenhum nome de comando resultar, as atribuições de variáveis afetarão o ambiente de shell atual. Caso contrário, as variáveis são adicionadas ao ambiente do comando executado e não afetam o ambiente atual do shell. Se qualquer uma das atribuições tentar atribuir um valor a uma variável somente leitura, ocorrerá um erro e o comando sairá com um status diferente de zero.

Se nenhum nome de comando resultar, os redirecionamentos serão executados, mas não afetarão o ambiente de shell atual. Um erro de redirecionamento faz com que o comando saia com um status diferente de zero.

Se sobrar um nome de comando após a expansão, a execução prossegue conforme descrito abaixo. Caso contrário, o comando é encerrado. Se uma das expansões continha uma substituição de comando, o status de saída do comando é o status de saída da última substituição de comando realizada. Se não houver substituições de comando, o comando sai com status zero.

EXECUÇÃO DE COMANDO

Depois que um comando foi dividido em palavras, se resultar em um comando simples e uma lista opcional de argumentos, as seguintes ações serão executadas.

Se o nome do comando não contiver barras, o shell tentará localizá-lo. Se existir uma função shell com esse nome, essa função será invocada conforme descrito acima em FUNÇÕES. Se o nome não corresponder a uma função, o shell o procurará na lista de componentes internos do shell. Se uma correspondência for encontrada, esse builtin será invocado.

Se o nome não for uma função shell nem um builtin e não contiver barras, bash procura cada elemento do PATH por um diretório contendo um arquivo executável com esse nome. Bash usa uma tabela de hash para lembrar os nomes de caminho completos dos arquivos executáveis (consulte hash em COMANDOS SHELL BUILTIN abaixo). Uma pesquisa completa dos diretórios em PATH é realizada apenas se o comando não for encontrado na tabela hash. Se a pesquisa não for bem-sucedida, o shell procurará uma função de shell definida chamada command_not_found_handle. Se essa função existir, ela será invocada em um ambiente de execução separado com o comando original e os argumentos do comando original como seus argumentos, e o status de saída da função se tornará o status de saída desse subshell. Se essa função não for definida, o shell imprimirá uma mensagem de erro e retornará um status de saída de 127.

Se a pesquisa for bem-sucedida ou se o nome do comando contiver uma ou mais barras, o shell executará o programa nomeado em um ambiente de execução separado. O argumento 0 é definido como o nome fornecido e os argumentos restantes para o comando são definidos como os argumentos fornecidos, se houver.

Se esta execução falhar porque o arquivo não está no formato executável e o arquivo não é um diretório, presume-se que seja um shell script, um arquivo contendo comandos shell. Um subshell é gerado para executá-lo. Este subshell se reinicializa, de modo que o efeito é como se um novo shell tivesse sido invocado para lidar com o script, com exceção dos locais dos comandos lembrados pelo pai (consulte hash abaixo em SHELL BUILTIN COMMANDS) são retidos pela criança.

Se o programa for um arquivo começando com #!, o restante da primeira linha especifica um interpretador para o programa. O shell executa o interpretador especificado em sistemas operacionais que não lidam com esse formato executável. Os argumentos para o interpretador consistem em um único argumento opcional após o nome do interpretador na primeira linha do programa, seguido pelo nome do programa, seguido pelos argumentos do comando, se houver.

AMBIENTE DE EXECUÇÃO DE COMANDO

O shell possui um ambiente de execução, que consiste no seguinte:

  • arquivos abertos herdados pelo shell na chamada, conforme modificados pelos redirecionamentos fornecidos para o builtin exec

  • o diretório de trabalho atual conforme definido por cd, pushd ou popd ou herdado pelo shell na chamada

  • a máscara do modo de criação de arquivo definida por umask ou herdada do pai do shell

  • armadilhas atuais definidas por trap

  • parâmetros de shell que são definidos por atribuição de variável ou com set ou herdados do pai do shell no ambiente

  • funções shell definidas durante a execução ou herdadas do pai do shell no ambiente

  • opções habilitadas na chamada (por padrão ou com argumentos de linha de comando) ou por set

  • opções ativadas por shopt

  • aliases de shell definidos com alias

  • vários IDs de processo, incluindo os de trabalhos em segundo plano, o valor de $$ e o valor de PPID. Quando um comando simples diferente de uma função incorporada ou shell deve ser executado, ele é invocado em um ambiente de execução separado que consiste no seguinte. Salvo indicação em contrário, os valores são herdados do shell.

  • os arquivos abertos do shell, além de quaisquer modificações e adições especificadas por redirecionamentos para o comando

  • o diretório de trabalho atual

  • a máscara do modo de criação de arquivo

  • variáveis e funções do shell marcadas para exportação, juntamente com as variáveis exportadas para o comando, passadas no ambiente

  • as armadilhas capturadas pelo shell são redefinidas para os valores herdados do pai do shell e as armadilhas ignoradas pelo shell são ignoradas

Um comando invocado neste ambiente separado não pode afetar o ambiente de execução do shell.

Substituição de comando, comandos agrupados com parênteses e comandos assíncronos são chamados em um ambiente de subshell que é uma duplicata do ambiente shell, exceto que as armadilhas capturadas pelo shell são redefinidas para os valores que o shell herdou de seu pai na chamada. Os comandos integrados que são invocados como parte de um pipeline também são executados em um ambiente de subshell. As alterações feitas no ambiente do subshell não podem afetar o ambiente de execução do shell.

Subshells gerados para executar substituições de comando herdam o valor da opção -e do shell pai. Quando não está no modo posix, bash limpa a opção -e em tais subshells.

Se um comando for seguido por um & e o controle de trabalho não estiver ativo, a entrada padrão padrão para o comando é o arquivo vazio /dev/null. Caso contrário, o comando invocado herda os descritores de arquivo do shell de chamada conforme modificado pelos redirecionamentos.

AMBIENTE

Quando um programa é invocado, ele recebe um array de strings chamado ambiente. Esta é uma lista de pares nome-valor, no formato nome=valor.

O shell fornece várias maneiras de manipular o ambiente. Na chamada, o shell verifica seu próprio ambiente e cria um parâmetro para cada nome encontrado, marcando-o automaticamente para exportar para processos filhos. Os comandos executados herdam o ambiente. Os comandos export e declare -x permitem que parâmetros e funções sejam adicionados e excluídos do ambiente. Se o valor de um parâmetro no ambiente for modificado, o novo valor passa a fazer parte do ambiente, substituindo o antigo. O ambiente herdado por qualquer comando executado consiste no ambiente inicial do shell, cujos valores podem ser modificados no shell, menos quaisquer pares removidos pelo comando unset, mais quaisquer adições via export comandos e declare -x.

O ambiente para qualquer comando simples ou função pode ser aumentado temporariamente prefixando-o com atribuições de parâmetros, conforme descrito acima em PARÂMETROS. Essas instruções de atribuição afetam apenas o ambiente visto por esse comando.

Se a opção -k estiver definida (consulte o comando interno set abaixo), então todas as atribuições de parâmetro são colocadas no ambiente para um comando, não apenas aqueles que precedem o nome do comando.

Quando bash invoca um comando externo, a variável _ é definida como o nome de arquivo completo do comando e passada para esse comando em seu ambiente.

ESTADO DE SAÍDA

O status de saída de um comando executado é o valor retornado pela chamada do sistema waitpid ou função equivalente. Os status de saída ficam entre 0 e 255, embora, conforme explicado abaixo, o shell possa usar valores acima de 125 especialmente. Os status de saída de comandos internos do shell e comandos compostos também são limitados a esse intervalo. Sob certas circunstâncias, o shell usará valores especiais para indicar modos de falha específicos.

Para os propósitos do shell, um comando que sai com um status de saída zero foi bem-sucedido. Um status de saída de zero indica sucesso. Um status de saída diferente de zero indica falha. Quando um comando termina em um sinal fatal N, bash usa o valor de 128+N como status de saída.

Se um comando não for encontrado, o processo filho criado para executá-lo retornará um status de 127. Se um comando for encontrado, mas não for executável, o status de retorno será 126.

Se um comando falhar devido a um erro durante a expansão ou redirecionamento, o status de saída será maior que zero.

Os comandos internos do shell retornam um status de 0 (verdadeiro) se forem bem-sucedidos e diferente de zero (falso) se ocorrer um erro durante a execução. Todos os builtins retornam um status de saída de 2 para indicar uso incorreto, opções geralmente inválidas ou argumentos ausentes.

O próprio Bash retorna o status de saída do último comando executado, a menos que ocorra um erro de sintaxe, caso em que sai com um valor diferente de zero. Veja também o comando embutido exit abaixo.

SINAIS

Quando bash é interativo, na ausência de qualquer interceptação, ele ignora SIGTERM (para que kill 0 não elimine um shell interativo) e SIGINT é capturado e manipulado (para que o aguardar embutido seja interrompível). Em todos os casos, bash ignora SIGQUIT. Se o controle de trabalho estiver em vigor, bash ignora SIGTTIN, SIGTTOU e SIGTSTP.

Comandos não integrados executados por bash têm manipuladores de sinal definidos para os valores herdados pelo shell de seu pai. Quando o controle de trabalho não está em vigor, os comandos assíncronos ignoram SIGINT e SIGQUIT além desses manipuladores herdados. Os comandos executados como resultado da substituição de comandos ignoram os sinais de controle de trabalho gerados pelo teclado SIGTTIN, SIGTTOU e SIGTSTP.

O shell sai por padrão ao receber um SIGHUP. Antes de sair, um shell interativo reenvia o SIGHUP para todos os trabalhos, em execução ou parados. Os trabalhos parados recebem SIGCONT para garantir que recebam o SIGHUP. Para evitar que o shell envie o sinal para um trabalho específico, ele deve ser removido da tabela de trabalhos com o disown embutido (consulte COMANDOS SHELL BUILTIN abaixo) ou marcado para não receba SIGHUP usando disown -h.

Se a opção de shell huponexit tiver sido definida com shopt, bash enviará um SIGHUP para todos os trabalhos quando um login interativo concha sai.

Se o bash estiver esperando a conclusão de um comando e receber um sinal para o qual uma interceptação foi definida, a interceptação não será executada até que o comando seja concluído. Quando bash está esperando por um comando assíncrono por meio do wait integrado, a recepção de um sinal para o qual uma armadilha foi definida causará a espera builtin para retornar imediatamente com um status de saída maior que 128, imediatamente após o qual a armadilha é executada.

CONTROLE DE TRABALHO

Controle de tarefa refere-se à capacidade de parar seletivamente (suspender) a execução de processos e continuar (reiniciar) sua execução posteriormente. Um usuário normalmente emprega esse recurso por meio de uma interface interativa fornecida em conjunto pelo driver de terminal do kernel do sistema operacional e pelo bash.

O shell associa um trabalho a cada pipeline. Ele mantém uma tabela de trabalhos atualmente em execução, que podem ser listados com o comando jobs. Quando bash inicia um trabalho de forma assíncrona (em background), ele imprime uma linha que se parece com:

[1] 25647

indicando que esta tarefa é a tarefa número 1 e que o ID do último processo no pipeline associado a esta tarefa é 25647. Todos os processos em um único pipeline são membros da mesma tarefa. O Bash usa a abstração job como base para o controle do trabalho.

Para facilitar a implementação da interface do usuário para o controle do trabalho, o sistema operacional mantém a noção de um terminal atual ID do grupo de processos. Os membros deste grupo de processos (processos cujo ID do grupo de processos é igual ao ID atual do grupo de processos do terminal) recebem sinais gerados pelo teclado, como SIGINT. Diz-se que esses processos estão em primeiro plano. Os processos Background são aqueles cujo ID do grupo de processos difere do do terminal; tais processos são imunes a sinais gerados pelo teclado. Somente os processos em primeiro plano têm permissão para ler ou, se o usuário especificar com stty tostop, gravar no terminal. Os processos em segundo plano que tentam ler (gravar quando stty tostop está em vigor) do terminal recebem um sinal SIGTTIN (SIGTTOU) pelo driver de terminal do kernel, que, a menos que capturado, suspende o processo.

Se o sistema operacional no qual bash está sendo executado suporta controle de trabalho, bash contém recursos para usá-lo. Digitar o caractere suspender (normalmente ^Z, Control-Z) enquanto um processo está em execução faz com que esse processo seja interrompido e retorna o controle para bash . Digitar o caractere suspensão atrasada (normalmente ^Y, Control-Y) faz com que o processo seja interrompido quando ele tenta ler a entrada do terminal e o controle é retornado para bash. O usuário pode então manipular o estado deste trabalho, usando o comando bg para continuá-lo em segundo plano, o comando fg para continuá-lo em primeiro plano ou o kill para eliminá-lo. Um ^Z entra em vigor imediatamente e tem o efeito colateral adicional de fazer com que a saída pendente e a digitação antecipada sejam descartadas.

Há várias maneiras de se referir a um trabalho no shell. O caractere % introduz uma especificação de trabalho (jobspec). O número do trabalho n pode ser referido como %n. Um trabalho também pode ser referido usando um prefixo do nome usado para iniciá-lo ou usando uma substring que aparece em sua linha de comando. Por exemplo, %ce refere-se a um trabalho interrompido cujo nome de comando começa com ce. Se um prefixo corresponder a mais de um trabalho, bash relata um erro. Usar %?ce, por outro lado, refere-se a qualquer tarefa que contenha a string ce em sua linha de comando. Se a substring corresponder a mais de um trabalho, bash relatará um erro. Os símbolos %% e %+ referem-se à noção do shell do trabalho atual, que é o último trabalho interrompido enquanto estava em primeiro plano ou iniciado em segundo plano. O trabalho anterior pode ser referenciado usando %-. Se houver apenas um único trabalho, %+ e %- podem ser usados para se referir a esse trabalho. Na saída referente a trabalhos (por exemplo, a saída do comando jobs), o trabalho atual é sempre sinalizado com um + e o trabalho anterior com um - . Um único % (sem especificação de trabalho acompanhante) também se refere ao trabalho atual.

Simplesmente nomear um trabalho pode ser usado para trazê-lo para o primeiro plano: %1 é sinônimo de ``fg %1'', trazendo o trabalho 1 do segundo plano para o primeiro plano. Da mesma forma, ``%1 &'' retoma o trabalho 1 em segundo plano, equivalente a ``bg %1''.

O shell aprende imediatamente sempre que um trabalho muda de estado. Normalmente, bash espera até que esteja prestes a imprimir um prompt antes de relatar alterações no status de um trabalho para não interromper nenhuma outra saída. Se a opção -b para o comando interno set estiver habilitada, o bash relata tais alterações imediatamente. Qualquer trap em SIGCHLD é executado para cada filho que sai.

Se uma tentativa de sair do bash for feita enquanto os trabalhos estiverem parados (ou, se a opção de shell checkjobs tiver sido habilitada usando o shopt embutido, executando ), o shell imprime uma mensagem de aviso e, se a opção checkjobs estiver ativada, lista os trabalhos e seus status. O comando jobs pode então ser usado para inspecionar seu status. Se uma segunda tentativa de sair for feita sem um comando interveniente, o shell não imprimirá outro aviso e quaisquer trabalhos interrompidos serão encerrados.

Quando o shell está esperando por um trabalho ou processo usando o wait interno e o controle de trabalho está ativado, wait retornará quando o trabalho mudar de estado. A opção -f faz com que wait espere até que a tarefa ou processo termine antes de retornar.

AVISANDO

Ao executar interativamente, o bash exibe o prompt principal PS1 quando está pronto para ler um comando e o prompt secundário PS2 quando precisa de mais entrada para concluir um comando. Bash exibe PS0 depois de ler um comando, mas antes de executá-lo. Bash exibe PS4 conforme descrito acima antes de rastrear cada comando quando a opção -x está ativada. Bash permite que essas strings de prompt sejam personalizadas inserindo vários caracteres especiais de escape de barra invertida que são decodificados da seguinte forma:

\a

um caractere de sino ASCII (07)

\d

a data no formato "Weekday Month Date" (por exemplo, "Tue May 26")

\D{format}

o format é passado para strftime(3) e o resultado é inserido na string do prompt; um formato vazio resulta em uma representação de tempo específica do local. As chaves são necessárias

\e

um caractere de escape ASCII (033)

\h

o nome do host até o primeiro `.'

\H

o nome do host

\j

o número de trabalhos atualmente gerenciados pelo shell

\l

o nome base do nome do dispositivo terminal do shell

\n

nova linha

\r

retorno de carruagem

\s

o nome do shell, o nome base de $0 (a parte após a barra final)

\t

a hora atual no formato HH:MM:SS de 24 horas

\T

a hora atual no formato HH:MM:SS de 12 horas

\@

a hora atual no formato am/pm de 12 horas

\A

a hora atual no formato HH:MM de 24 horas

\u

o nome de usuário do usuário atual

\v

a versão do bash (por exemplo, 2.00)

\V

o lançamento de bash, versão + nível de patch (por exemplo, 2.00.0)

\w

o diretório de trabalho atual, com $HOME abreviado com um til (usa o valor da variável PROMPT_DIRTRIM)

\W

o nome base do diretório de trabalho atual, com $HOME abreviado com um til

\!

o número do histórico deste comando

\#

o número do comando deste comando

\$

se o UID efetivo for 0, um #, caso contrário, um $

\nnn

o caractere correspondente ao número octal nnn

\\

uma barra invertida

\[

inicia uma sequência de caracteres não imprimíveis, que podem ser usados para incorporar uma sequência de controle de terminal no prompt

\]

terminar uma sequência de caracteres não imprimíveis

O número do comando e o número do histórico geralmente são diferentes: o número do histórico de um comando é sua posição na lista do histórico, que pode incluir comandos restaurados do arquivo do histórico (consulte HISTÓRICO abaixo), enquanto o comando number é a posição na sequência de comandos executados durante a sessão atual do shell. Depois que a string é decodificada, ela é expandida via expansão de parâmetro, substituição de comando, expansão aritmética e remoção de aspas, sujeita ao valor da opção de shell promptvars (consulte a descrição do shopt< em COMANDOS SHELL BUILTIN abaixo). Isso pode ter efeitos colaterais indesejados se as partes com escape da string aparecerem na substituição do comando ou contiverem caracteres especiais para a expansão de palavras.

LEIA A LINHA

Esta é a biblioteca que manipula a entrada de leitura ao usar um shell interativo, a menos que a opção --noediting seja fornecida na chamada do shell. A edição de linha também é usada ao usar a opção -e para o ler integrado. Por padrão, os comandos de edição de linha são semelhantes aos do Emacs. Uma interface de edição de linha estilo vi também está disponível. A edição de linha pode ser habilitada a qualquer momento usando as opções -o emacs ou -o vi para o set integrado (consulte SHELL BUILTIN COMANDOS abaixo). Para desativar a edição de linha após a execução do shell, use as opções +o emacs ou +o vi para o set builtin.

Notação de linha de leitura

Nesta seção, a notação do estilo Emacs é usada para denotar pressionamentos de tecla. As teclas de controle são indicadas por C-tecla, por exemplo, C-n significa Control-N. Da mesma forma, chaves meta são indicadas por M-chave, então M-x significa Meta-X. (Em teclados sem tecla meta, M-x significa ESC x, ou seja, pressione a tecla Escape e depois x. Isso torna ESC o prefixo meta. A combinação M-C-x significa ESC-Control-x, ou pressione a tecla Escape e então segure a tecla Control enquanto pressiona a tecla x.)

Os comandos Readline podem receber argumentos numéricos, que normalmente atuam como uma contagem repetida. Às vezes, porém, é o sinal do argumento que é significativo. Passar um argumento negativo para um comando que atua na direção direta (por exemplo, kill-line) faz com que esse comando atue na direção inversa. Comandos cujo comportamento com argumentos se desviam disso são indicados abaixo.

Quando um comando é descrito como texto matando, o texto excluído é salvo para possível recuperação futura (arrancar). O texto morto é salvo em um anel de morte. Mortes consecutivas fazem com que o texto seja acumulado em uma unidade, que pode ser arrancada de uma só vez. Os comandos que não eliminam o texto separam os blocos de texto no anel de interrupção.

Inicialização da linha de leitura

Readline é personalizado colocando comandos em um arquivo de inicialização (o arquivo inputrc). O nome deste arquivo é obtido do valor da variável INPUTRC. Se essa variável não estiver definida, o padrão é ~/.inputrc. Se esse arquivo não existir ou não puder ser lido, o padrão final é /etc/inputrc. Quando um programa que usa a biblioteca readline é inicializado, o arquivo de inicialização é lido e as combinações de teclas e variáveis são definidas. Existem apenas algumas construções básicas permitidas no arquivo de inicialização readline. Linhas em branco são ignoradas. As linhas que começam com # são comentários. As linhas que começam com $ indicam construções condicionais. Outras linhas denotam combinações de teclas e configurações de variáveis.

As combinações de teclas padrão podem ser alteradas com um arquivo inputrc. Outros programas que usam esta biblioteca podem adicionar seus próprios comandos e ligações.

Por exemplo, colocando

M-Control-u: universal-argument

ou

C-Meta-u: universal-argument

no inputrc faria M-C-u executar o comando readline universal-argument.

Os seguintes nomes de caracteres simbólicos são reconhecidos: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, ESPAÇO e TAB.

Além dos nomes de comando, readline permite que as teclas sejam vinculadas a uma string que é inserida quando a tecla é pressionada (uma macro).

Ligações de teclas Readline

A sintaxe para controlar as ligações de teclas no arquivo inputrc é simples. Tudo o que é necessário é o nome do comando ou o texto de uma macro e uma sequência de teclas à qual ela deve ser vinculada. O nome pode ser especificado de duas maneiras: como um nome de chave simbólico, possivelmente com os prefixos Meta- ou Control-, ou como uma sequência de teclas.

Ao usar a forma keyname: function-name ou macro, keyname é o nome de uma chave escrita em Inglês. Por exemplo:

Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> output"

No exemplo acima, C-u está vinculado à função universal-argument, M-DEL está vinculado à função backward-kill -word, e C-o é obrigado a executar a macro expressa no lado direito (isto é, para inserir o texto ``> output'' na linha).

Na segunda forma, "keyseq": nome-da-função ou macro, keyseq difere de nome-chave acima em que as strings que denotam uma sequência de teclas inteira podem ser especificadas colocando a sequência entre aspas duplas. Alguns escapes de chave de estilo GNU Emacs podem ser usados, como no exemplo a seguir, mas os nomes de caracteres simbólicos não são reconhecidos.

"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Function Key 1"

Neste exemplo, C-u está novamente vinculado à função argumento-universal. C-x C-r está vinculado à função re-read-init-file e ESC [ 1 1 ~ está vinculado a inserir o texto `` Tecla de função 1''.

O conjunto completo de sequências de escape no estilo GNU Emacs é

\C-

prefixo de controle

\M-

prefixo meta

\e

um personagem de fuga

\\

barra invertida

\"

literais"

\'

literal '

Além das sequências de escape do estilo GNU Emacs, um segundo conjunto de escapes de barra invertida está disponível:

\a

alerta (campainha)

\b

backspace

\d

excluir

\f

feed de formulário

\n

nova linha

\r

retorno de carruagem

\t

guia horizontal

\v

guia vertical

\nnn

o caractere de oito bits cujo valor é o valor octal nnn (um a três dígitos)

\xHH

o caractere de oito bits cujo valor é o valor hexadecimal HH (um ou dois dígitos hexadecimais)

Ao inserir o texto de uma macro, aspas simples ou duplas devem ser usadas para indicar uma definição de macro. Supõe-se que o texto sem aspas seja um nome de função. No corpo da macro, os escapes de barra invertida descritos acima são expandidos. A barra invertida irá citar qualquer outro caractere no texto da macro, incluindo " e '.

Bash permite que as ligações de teclas readline atuais sejam exibidas ou modificadas com o comando interno bind. O modo de edição pode ser alternado durante o uso interativo usando a opção -o para o comando interno set (consulte COMANDOS SHELL BUILTIN abaixo).

Variáveis de linha de leitura

O Readline possui variáveis que podem ser usadas para personalizar ainda mais seu comportamento. Uma variável pode ser definida no arquivo inputrc com uma declaração na forma

set variable-name value

ou usando o comando interno bind (consulte COMANDOS SHELL BUILTIN abaixo).

Exceto quando indicado, as variáveis readline podem assumir os valores On ou Off (sem levar em conta o caso). Nomes de variáveis não reconhecidos são ignorados. Quando um valor de variável é lido, valores vazios ou nulos, "on" (sem distinção entre maiúsculas e minúsculas) e "1" são equivalentes a On. Todos os outros valores são equivalentes a Desligado. As variáveis e seus valores padrão são:

bell-style (audible)

Controla o que acontece quando o readline deseja tocar a campainha do terminal. Se definido como nenhum, readline nunca toca a campainha. Se definido como visível, o readline usa um sino visível, se houver um disponível. Se definido como audível, readline tenta tocar a campainha do terminal.

bind-tty-special-chars (On)

Se definido como On, readline tenta vincular os caracteres de controle tratados especialmente pelo driver de terminal do kernel aos seus equivalentes readline.

blink-matching-paren (Off)

Se definido como On, readline tenta mover brevemente o cursor para um parêntese de abertura quando um parêntese de fechamento é inserido.

colored-completion-prefix (Off)

Se definido como On, ao listar conclusões, readline exibe o prefixo comum do conjunto de possíveis conclusões usando uma cor diferente. As definições de cor são obtidas do valor da variável de ambiente LS_COLORS.

colored-stats (Off)

Se definido como On, readline exibe possíveis conclusões usando cores diferentes para indicar o tipo de arquivo. As definições de cor são obtidas do valor da variável de ambiente LS_COLORS.

comment-begin (``#'')

A string que é inserida quando o comando readline insert-comment é executado. Este comando está vinculado a M-# no modo emacs e a # no modo de comando vi.

completion-display-width (-1)

O número de colunas de tela usadas para exibir possíveis correspondências ao executar a conclusão. O valor é ignorado se for menor que 0 ou maior que a largura da tela do terminal. Um valor de 0 fará com que as correspondências sejam exibidas uma por linha. O valor padrão é -1.

completion-ignore-case (Off)

Se definido como Ativado, o readline executa a correspondência e a conclusão do nome do arquivo sem diferenciar maiúsculas de minúsculas.

completion-map-case (Off)

Se definido como On e completion-ignore-case estiver ativado, readline tratará hífens (-) e sublinhados (_) como equivalente ao executar correspondência e conclusão de nome de arquivo sem distinção entre maiúsculas e minúsculas.

completion-prefix-display-length (0)

O comprimento em caracteres do prefixo comum de uma lista de possíveis conclusões que é exibida sem modificação. Quando definido como um valor maior que zero, os prefixos comuns maiores que esse valor são substituídos por reticências ao exibir possíveis conclusões.

completion-query-items (100)

Isso determina quando o usuário é consultado sobre a exibição do número de possíveis conclusões geradas pelo comando possible-completions. Pode ser definido como qualquer valor inteiro maior ou igual a zero. Se o número de conclusões possíveis for maior ou igual ao valor desta variável, o readline perguntará se o usuário deseja ou não visualizá-las; caso contrário, eles são simplesmente listados no terminal.

convert-meta (On)

Se definido como On, readline converterá caracteres com o oitavo bit definido em uma sequência de teclas ASCII removendo o oitavo bit e prefixando um caractere de escape (na verdade, usando escape como o meta prefix). O padrão é Ativado, mas o readline o definirá como Desativado se a localidade contiver caracteres de oito bits.

disable-completion (Off)

Se definido como On, readline inibirá a conclusão da palavra. Os caracteres de conclusão serão inseridos na linha como se tivessem sido mapeados para auto-inserção.

echo-control-characters (On)

Quando definido como On, em sistemas operacionais que indicam suporte, readline ecoa um caractere correspondente a um sinal gerado pelo teclado.

editing-mode (emacs)

Controla se a linha de leitura começa com um conjunto de combinações de teclas semelhantes a Emacs ou vi. editing-mode pode ser definido como emacs ou vi.

emacs-mode-string (@)

Se a variável show-mode-in-prompt estiver habilitada, esta string é exibida imediatamente antes da última linha do prompt principal quando o modo de edição do emacs está ativo. O valor é expandido como uma ligação de tecla, portanto, o conjunto padrão de meta e prefixos de controle e sequências de escape de barra invertida estão disponíveis. Use os escapes \1 e \2 para iniciar e terminar sequências de caracteres não imprimíveis, que podem ser usados para incorporar uma sequência de controle de terminal na string de modo.

enable-bracketed-paste (On)

Quando definido como On, o readline configurará o terminal de forma a permitir que ele insira cada pasta no buffer de edição como uma única string de caracteres, em vez de tratar cada caractere como se tivesse sido lido do teclado. Isso pode impedir que os caracteres colados sejam interpretados como comandos de edição.

enable-keypad (Off)

Quando definido como On, o readline tentará habilitar o teclado do aplicativo quando for chamado. Alguns sistemas precisam disso para ativar as teclas de seta.

enable-meta-key (On)

Quando definido como Ativado, o readline tentará habilitar qualquer tecla metamodificadora que o terminal afirme suportar quando for chamada. Em muitos terminais, a tecla meta é usada para enviar caracteres de oito bits.

expand-tilde (Off)

Se definido como Ativado, a expansão do til é executada quando a linha de leitura tenta completar a palavra.

history-preserve-point (Off)

Se definido como On, o código do histórico tenta colocar o ponto no mesmo local em cada linha do histórico recuperada com previous-history ou next-history .

history-size (unset)

Defina o número máximo de entradas de histórico salvas na lista de histórico. Se definido como zero, todas as entradas de histórico existentes serão excluídas e nenhuma nova entrada será salva. Se definido como um valor menor que zero, o número de entradas do histórico não é limitado. Por padrão, o número de entradas do histórico é definido como o valor da variável de shell HISTSIZE. Se for feita uma tentativa de definir tamanho do histórico para um valor não numérico, o número máximo de entradas do histórico será definido como 500.

horizontal-scroll-mode (Off)

Quando definido como Ativado, faz com que a linha de leitura use uma única linha para exibição, rolando a entrada horizontalmente em uma única linha da tela quando ela se torna maior que a largura da tela, em vez de quebrar em uma nova linha. Esta configuração é habilitada automaticamente para terminais de altura 1.

input-meta (Off)

Se definido como On, o readline habilitará a entrada de oito bits (ou seja, não retirará o oitavo bit dos caracteres que lê), independentemente do que o terminal afirma que pode suportar. O nome meta-flag é um sinônimo para esta variável. O padrão é Desativado, mas o readline o definirá como Ativado se a localidade contiver caracteres de oito bits.

isearch-terminators (``C-[C-J'')

A cadeia de caracteres que deve encerrar uma pesquisa incremental sem executar o caractere como um comando. Se esta variável não recebeu um valor, os caracteres ESC e C-J encerrarão uma pesquisa incremental.

keymap (emacs)

Defina o mapa de teclado atual da linha de leitura. O conjunto de nomes de mapa de teclado válido é emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command e vi-insert. vi é equivalente a vi-command; emacs é equivalente a emacs-standard. O valor padrão é emacs; o valor de editing-mode também afeta o mapa de teclado padrão.

keyseq-timeout (500)

Especifica a duração que readline esperará por um caractere ao ler uma sequência de teclas ambígua (uma que pode formar uma sequência de teclas completa usando a entrada lida até agora ou pode receber entradas adicionais para concluir uma sequência de teclas mais longa) . Se nenhuma entrada for recebida dentro do tempo limite, readline usará a sequência de teclas mais curta, mas completa. O valor é especificado em milissegundos, portanto, um valor de 1000 significa que readline aguardará um segundo por entradas adicionais. Se esta variável for definida para um valor menor ou igual a zero, ou para um valor não numérico, readline aguardará até que outra tecla seja pressionada para decidir qual sequência de teclas deve ser concluída.

mark-directories (On)

Se definido como Ativado, os nomes de diretório completos têm uma barra anexada.

mark-modified-lines (Off)

Se definido como On, as linhas do histórico que foram modificadas são exibidas com um asterisco anterior (*).

mark-symlinked-directories (Off)

Se definido como On, nomes completos que são links simbólicos para diretórios têm uma barra anexada (sujeito ao valor de mark-directories).

match-hidden-files (On)

Esta variável, quando definida como On, faz com que a linha de leitura corresponda aos arquivos cujos nomes começam com `.' (arquivos ocultos) ao executar a conclusão do nome do arquivo. Se definido como Desativado, o `.' deve ser fornecido pelo usuário no nome do arquivo a ser preenchido.

menu-complete-display-prefix (Off)

Se definido como Ativado, a conclusão do menu exibe o prefixo comum da lista de possíveis conclusões (que pode estar vazia) antes de percorrer a lista.

output-meta (Off)

Se definido como On, readline exibirá caracteres com o oitavo bit definido diretamente, em vez de uma sequência de escape meta-prefixada. O padrão é Desativado, mas o readline o definirá como Ativado se a localidade contiver caracteres de oito bits.

page-completions (On)

Se definido como On, o readline usa um pager interno mais para exibir uma tela cheia de possíveis conclusões de cada vez.

print-completions-horizontally (Off)

Se definido como On, readline exibirá conclusões com correspondências classificadas horizontalmente em ordem alfabética, em vez de na tela.

revert-all-at-newline (Off)

Se definido como On, readline desfará todas as alterações nas linhas do histórico antes de retornar quando accept-line for executado. Por padrão, as linhas do histórico podem ser modificadas e reter listas de desfazer individuais nas chamadas para readline.

show-all-if-ambiguous (Off)

Isso altera o comportamento padrão das funções de conclusão. Se definido como On, as palavras que têm mais de uma conclusão possível fazem com que as correspondências sejam listadas imediatamente, em vez de tocar a campainha.

show-all-if-unmodified (Off)

Isso altera o comportamento padrão das funções de conclusão de maneira semelhante a show-all-if-ambiguous. Se definido como On, as palavras que têm mais de uma conclusão possível sem qualquer conclusão parcial possível (as possíveis conclusões não compartilham um prefixo comum) fazem com que as correspondências sejam listadas imediatamente em vez de tocar a campainha.

show-mode-in-prompt (Off)

Se definido como On, adicione uma string ao início do prompt indicando o modo de edição: emacs, vi command ou vi insert. As strings de modo são configuráveis pelo usuário (por exemplo, emacs-mode-string).

skip-completed-text (Off)

Se definido como On, isso altera o comportamento de conclusão padrão ao inserir uma única correspondência na linha. Só está ativo ao executar a conclusão no meio de uma palavra. Se ativado, readline não insere caracteres de conclusão que correspondam a caracteres após o ponto na palavra que está sendo concluída, portanto, partes da palavra após o cursor não são duplicadas.

vi-cmd-mode-string ((cmd))

Se a variável show-mode-in-prompt estiver habilitada, esta string é exibida imediatamente antes da última linha do prompt primário quando o modo de edição vi está ativo e no modo de comando. O valor é expandido como uma ligação de tecla, portanto, o conjunto padrão de meta e prefixos de controle e sequências de escape de barra invertida estão disponíveis. Use os escapes \1 e \2 para iniciar e terminar sequências de caracteres não imprimíveis, que podem ser usados para incorporar uma sequência de controle de terminal na string de modo.

vi-ins-mode-string ((ins))

Se a variável show-mode-in-prompt estiver habilitada, esta string é exibida imediatamente antes da última linha do prompt principal quando o modo de edição vi está ativo e no modo de inserção. O valor é expandido como uma ligação de tecla, portanto, o conjunto padrão de meta e prefixos de controle e sequências de escape de barra invertida estão disponíveis. Use os escapes \1 e \2 para iniciar e terminar sequências de caracteres não imprimíveis, que podem ser usados para incorporar uma sequência de controle de terminal na string de modo.

visible-stats (Off)

Se definido como Ativado, um caractere denotando o tipo de arquivo conforme relatado por stat(2) é anexado ao nome do arquivo ao listar possíveis conclusões.

Construções Condicionais Readline

O Readline implementa um recurso semelhante em espírito aos recursos de compilação condicional do pré-processador C, que permite que combinações de teclas e configurações de variáveis sejam executadas como resultado de testes. Existem quatro diretivas de analisador utilizadas.

$if

A construção $if permite que as ligações sejam feitas com base no modo de edição, no terminal que está sendo usado ou no aplicativo que usa readline. O texto do teste, após qualquer operador de comparação, se estende até o final da linha; salvo indicação em contrário, nenhum caractere é necessário para isolá-lo.

mode

A forma mode= da diretiva $if é usada para testar se readline está no modo emacs ou vi. Isso pode ser usado em conjunto com o comando set keymap, por exemplo, para definir ligações apenas nos mapas de teclado emacs-standard e emacs-ctlx se o readline estiver iniciando no modo emacs.

term

O formulário term= pode ser usado para incluir associações de teclas específicas do terminal, talvez para vincular as sequências de teclas geradas pelas teclas de função do terminal. A palavra no lado direito do = é testada em relação ao nome completo do terminal e à parte do nome do terminal antes do primeiro -. Isso permite que sun corresponda a sun e sun-cmd, por exemplo.

version

O teste de versão pode ser usado para realizar comparações com versões readline específicas. A versão se expande para a versão readline atual. O conjunto de operadores de comparação inclui =, (e ==), !=, <=, >=, < e >. O número da versão fornecido no lado direito do operador consiste em um número de versão principal, um ponto decimal opcional e uma versão secundária opcional (por exemplo, 7.1). Se a versão secundária for omitida, presume-se que seja 0. O operador pode ser separado da string versão e do argumento do número da versão por um espaço em branco.

application

A construção aplicativo é usada para incluir configurações específicas do aplicativo. Cada programa que usa a biblioteca readline define o nome do aplicativo e um arquivo de inicialização pode testar um valor específico. Isso pode ser usado para vincular sequências de teclas a funções úteis para um programa específico. Por exemplo, o seguinte comando adiciona uma sequência de teclas que cita a palavra atual ou anterior em bash:

$if Bash
# Quote the current or previous word
"\C-xq": "\eb\"\ef\""
$endif
variable

A construção variável fornece testes de igualdade simples para variáveis e valores readline. Os operadores de comparação permitidos são =, == e !=. O nome da variável deve ser separado do operador de comparação por um espaço em branco; o operador pode ser separado do valor no lado direito por um espaço em branco. Ambas as variáveis string e booleanas podem ser testadas. As variáveis booleanas devem ser testadas em relação aos valores on e off.

$endif

Este comando, como visto no exemplo anterior, finaliza um comando $if.

$else

Os comandos nesta ramificação da diretiva $if são executados se o teste falhar.

$include

Essa diretiva usa um único nome de arquivo como argumento e lê comandos e ligações desse arquivo. Por exemplo, a seguinte diretiva seria /etc/inputrc:

$include   /etc/inputrc

Procurando

Readline fornece comandos para pesquisar no histórico de comandos (consulte HISTORY abaixo) para linhas contendo uma string especificada. Existem dois modos de pesquisa: incremental e não incremental.

As pesquisas incrementais começam antes que o usuário termine de digitar a string de pesquisa. À medida que cada caractere da string de pesquisa é digitado, readline exibe a próxima entrada do histórico correspondente à string digitada até o momento. Uma pesquisa incremental requer apenas tantos caracteres quantos forem necessários para localizar a entrada de histórico desejada. Os caracteres presentes no valor da variável isearch-terminators são usados para finalizar uma pesquisa incremental. Se essa variável não tiver um valor atribuído, os caracteres Escape e Control-J encerrarão uma pesquisa incremental. Control-G abortará uma pesquisa incremental e restaurará a linha original. Quando a pesquisa é encerrada, a entrada do histórico que contém a string de pesquisa torna-se a linha atual.

Para localizar outras entradas correspondentes na lista de histórico, digite Control-S ou Control-R conforme apropriado. Isso pesquisará para trás ou para frente no histórico para a próxima entrada correspondente à string de pesquisa digitada até agora. Qualquer outra sequência de teclas vinculada a um comando readline encerrará a pesquisa e executará esse comando. Por exemplo, uma nova linha encerrará a pesquisa e aceitará a linha, executando assim o comando da lista de histórico.

Readline lembra a última string de pesquisa incremental. Se dois Control-Rs forem digitados sem nenhum caractere intermediário definindo uma nova string de pesquisa, qualquer string de pesquisa lembrada será usada.

As pesquisas não incrementais leem toda a string de pesquisa antes de iniciar a pesquisa por linhas de histórico correspondentes. A string de pesquisa pode ser digitada pelo usuário ou fazer parte do conteúdo da linha atual.

Nomes de comando da linha de leitura

A seguir está uma lista dos nomes dos comandos e as sequências de teclas padrão às quais eles estão vinculados. Os nomes de comando sem uma sequência de teclas acompanhantes são desvinculados por padrão. Nas descrições a seguir, ponto refere-se à posição atual do cursor e marca refere-se a uma posição do cursor salva pelo comando set-mark. O texto entre o ponto e a marca é chamado de região.

Comandos para Mover

beginning-of-line (C-a)

Mover para o início da linha atual.

end-of-line (C-e)

Mover para o final da linha.

forward-char (C-f)

Avançar um personagem.

backward-char (C-b)

Mover um personagem para trás.

forward-word (M-f)

Avançar para o final da próxima palavra. As palavras são compostas por caracteres alfanuméricos (letras e dígitos).

backward-word (M-b)

Volte para o início da palavra atual ou anterior. As palavras são compostas por caracteres alfanuméricos (letras e dígitos).

shell-forward-word

Avançar para o final da próxima palavra. As palavras são delimitadas por metacaracteres shell sem aspas.

shell-backward-word

Volte para o início da palavra atual ou anterior. As palavras são delimitadas por metacaracteres shell sem aspas.

previous-screen-line

Tente mover o ponto para a mesma coluna da tela física na linha da tela física anterior. Isso não terá o efeito desejado se a linha Readline atual não ocupar mais de uma linha física ou se o ponto não for maior que o comprimento do prompt mais a largura da tela.

next-screen-line

Tente mover o ponto para a mesma coluna da tela física na próxima linha da tela física. Isso não terá o efeito desejado se a linha Readline atual não ocupar mais de uma linha física ou se o comprimento da linha Readline atual não for maior que o comprimento do prompt mais a largura da tela.

clear-display (M-C-l)

Limpe a tela e, se possível, o buffer de rolagem do terminal, redesenhe a linha atual, deixando a linha atual na parte superior da tela.

clear-screen (C-l)

Limpe a tela e redesenhe a linha atual, deixando a linha atual na parte superior da tela. Com um argumento, atualize a linha atual sem limpar a tela.

redraw-current-line

Atualize a linha atual.

Comandos para Manipulação do Histórico

accept-line (Newline, Return)

Aceite a linha independentemente de onde o cursor está. Se esta linha não estiver vazia, adicione-a à lista de histórico de acordo com o estado da variável HISTCONTROL. Se a linha for uma linha de histórico modificada, restaure a linha de histórico para seu estado original.

previous-history (C-p)

Busque o comando anterior da lista de histórico, voltando na lista.

next-history (C-n)

Busque o próximo comando da lista de histórico, avançando na lista.

beginning-of-history (M-<)

Mover para a primeira linha no histórico.

end-of-history (M->)

Vá para o final do histórico de entrada, ou seja, a linha que está sendo inserida no momento.

reverse-search-history (C-r)

Pesquise para trás começando na linha atual e movendo 'para cima' através do histórico conforme necessário. Esta é uma pesquisa incremental.

forward-search-history (C-s)

Pesquise para frente começando na linha atual e movendo `para baixo' através do histórico conforme necessário. Esta é uma pesquisa incremental.

non-incremental-reverse-search-history (M-p)

Pesquise para trás no histórico começando na linha atual usando uma pesquisa não incremental por uma string fornecida pelo usuário.

non-incremental-forward-search-history (M-n)

Pesquise adiante no histórico usando uma pesquisa não incremental por uma string fornecida pelo usuário.

history-search-forward

Pesquise adiante no histórico a sequência de caracteres entre o início da linha atual e o ponto. Esta é uma pesquisa não incremental.

history-search-backward

Pesquise para trás no histórico a sequência de caracteres entre o início da linha atual e o ponto. Esta é uma pesquisa não incremental.

history-substring-search-backward

Pesquise para trás no histórico a sequência de caracteres entre o início da linha atual e a posição atual do cursor (o ponto). A string de pesquisa pode corresponder a qualquer lugar em uma linha de histórico. Esta é uma pesquisa não incremental.

history-substring-search-forward

Pesquise adiante no histórico a sequência de caracteres entre o início da linha atual e o ponto. A string de pesquisa pode corresponder a qualquer lugar em uma linha de histórico. Esta é uma pesquisa não incremental.

yank-nth-arg (M-C-y)

Insira o primeiro argumento no comando anterior (geralmente a segunda palavra na linha anterior) no ponto. Com um argumento n, insira a nésima palavra do comando anterior (as palavras no comando anterior começam com a palavra 0). Um argumento negativo insere a nésima palavra do final do comando anterior. Depois que o argumento n é calculado, o argumento é extraído como se a expansão do histórico "!n" tivesse sido especificada.

yank-last-arg (M-. , M-_ )

Insira o último argumento no comando anterior (a última palavra da entrada do histórico anterior). Com um argumento numérico, comporte-se exatamente como yank-nth-arg. Chamadas sucessivas para yank-last-arg voltam pela lista do histórico, inserindo a última palavra (ou a palavra especificada pelo argumento da primeira chamada) de cada linha por vez. Qualquer argumento numérico fornecido a essas chamadas sucessivas determina a direção a ser percorrida no histórico. Um argumento negativo muda a direção através do histórico (para trás ou para frente). As facilidades de expansão do histórico são utilizadas para extrair a última palavra, como se a expansão do histórico "!$" tivesse sido especificada.

shell-expand-line (M-C-e)

Expanda a linha como o shell faz. Isso executa o alias e a expansão do histórico, bem como todas as expansões de palavras do shell. Consulte EXPANSÃO DO HISTÓRICO abaixo para obter uma descrição da expansão do histórico.

history-expand-line (M-^)

Execute a expansão do histórico na linha atual. Consulte EXPANSÃO DO HISTÓRICO abaixo para obter uma descrição da expansão do histórico.

magic-space

Execute a expansão do histórico na linha atual e insira um espaço. Consulte EXPANSÃO DO HISTÓRICO abaixo para obter uma descrição da expansão do histórico.

alias-expand-line

Execute a expansão do alias na linha atual. Consulte ALIASES acima para obter uma descrição da expansão de alias.

history-and-alias-expand-line

Execute a expansão do histórico e do alias na linha atual.

insert-last-argument (M-. , M-_ )

Um sinônimo para yank-last-arg.

operate-and-get-next (C-o)

Aceite a linha atual para execução e busque a próxima linha relativa à linha atual do histórico para edição. Um argumento numérico, se fornecido, especifica a entrada do histórico a ser usada em vez da linha atual.

edit-and-execute-command (C-x C-e)

Chame um editor na linha de comando atual e execute o resultado como comandos shell. Bash tenta invocar $VISUAL, $EDITOR e emacs como editor, nessa ordem.

Comandos para Alterar Texto

end-of-file (usually C-d)

O caractere que indica o fim do arquivo definido, por exemplo, por ``stty''. Se este caractere for lido quando não houver caracteres na linha e o ponto estiver no início da linha, o Readline o interpretará como o final da entrada e retornará EOF.

delete-char (C-d)

Exclua o caractere no ponto. Se esta função estiver vinculada ao mesmo caractere que o caractere tty EOF, como C-d geralmente é, veja acima os efeitos.

backward-delete-char (Rubout)

Exclua o caractere atrás do cursor. Ao receber um argumento numérico, salve o texto excluído no anel de eliminação.

forward-backward-delete-char

Exclua o caractere sob o cursor, a menos que o cursor esteja no final da linha; nesse caso, o caractere atrás do cursor é excluído.

quoted-insert (C-q, C-v)

Adicione o próximo caractere digitado à linha textualmente. É assim que se inserem caracteres como C-q, por exemplo.

tab-insert (C-v TAB)

Insira um caractere de tabulação.

self-insert (a, b, A, 1, !, ...)

Insira o caractere digitado.

transpose-chars (C-t)

Arraste o caractere antes do ponto para frente sobre o caractere no ponto, movendo o ponto para frente também. Se o ponto estiver no final da linha, isso transpõe os dois caracteres antes do ponto. Argumentos negativos não têm efeito.

transpose-words (M-t)

Arraste a palavra antes do ponto para além da palavra após o ponto, movendo o ponto sobre essa palavra também. Se o ponto estiver no final da linha, isso transpõe as duas últimas palavras da linha.

upcase-word (M-u)

Maiúsculas a palavra atual (ou seguinte). Com um argumento negativo, coloque a palavra anterior em maiúscula, mas não mova o ponto.

downcase-word (M-l)

Minúsculas a palavra atual (ou seguinte). Com um argumento negativo, diminua a palavra anterior, mas não mova o ponto.

capitalize-word (M-c)

Coloque em maiúscula a palavra atual (ou seguinte). Com um argumento negativo, coloque a palavra anterior em maiúscula, mas não mova o ponto.

overwrite-mode

Alternar o modo de substituição. Com um argumento numérico positivo explícito, alterna para o modo de substituição. Com um argumento numérico não positivo explícito, alterna para o modo de inserção. Este comando afeta apenas o modo emacs; O modo vi substitui de forma diferente. Cada chamada para readline() começa no modo de inserção. No modo de substituição, os caracteres vinculados à auto-inserção substituem o texto no ponto em vez de empurrar o texto para a direita. Os caracteres vinculados a backward-delete-char substituem o caractere antes do ponto por um espaço. Por padrão, esse comando não está associado.

Matar e Arrancar

kill-line (C-k)

Mate o texto do ponto até o final da linha.

backward-kill-line (C-x Rubout)

Mate para trás até o início da linha.

unix-line-discard (C-u)

Mate para trás do ponto até o início da linha. O texto morto é salvo no anel de morte.

kill-whole-line

Mate todos os personagens na linha atual, não importa onde esteja o ponto.

kill-word (M-d)

Matar do ponto até o final da palavra atual, ou se estiver entre as palavras, até o final da próxima palavra. Os limites da palavra são os mesmos usados por forward-word.

backward-kill-word (M-Rubout)

Mate a palavra atrás do ponto. Os limites das palavras são os mesmos usados por palavra invertida.

shell-kill-word

Matar do ponto até o final da palavra atual, ou se estiver entre as palavras, até o final da próxima palavra. Os limites da palavra são os mesmos usados por shell-forward-word.

shell-backward-kill-word

Mate a palavra atrás do ponto. Os limites da palavra são os mesmos usados por shell-backward-word.

unix-word-rubout (C-w)

Elimine a palavra atrás do ponto, usando o espaço em branco como um limite de palavra. O texto morto é salvo no anel de morte.

unix-filename-rubout

Elimine a palavra atrás do ponto, usando espaço em branco e o caractere de barra como os limites da palavra. O texto morto é salvo no anel de morte.

delete-horizontal-space (M-\)

Exclua todos os espaços e tabulações ao redor do ponto.

kill-region

Mate o texto na região atual.

copy-region-as-kill

Copie o texto da região para o kill buffer.

copy-backward-word

Copie a palavra antes de apontar para o buffer de interrupção. Os limites das palavras são os mesmos que palavra invertida.

copy-forward-word

Copie a palavra seguinte para o kill buffer. Os limites da palavra são os mesmos que forward-word.

yank (C-y)

Puxe o topo do anel de morte para o buffer no ponto.

yank-pop (M-y)

Gire o anel de matar e puxe o novo topo. Só funciona após yank ou yank-pop.

Argumentos Numéricos

digit-argument (M-0, M-1, ..., M--)

Adicione este dígito ao argumento que já está acumulando ou inicie um novo argumento. M-- inicia um argumento negativo.

universal-argument

Essa é outra maneira de especificar um argumento. Se este comando for seguido por um ou mais dígitos, opcionalmente com um sinal de menos à esquerda, esses dígitos definem o argumento. Se o comando for seguido por dígitos, executar argumento-universal novamente encerra o argumento numérico, mas é ignorado caso contrário. Como um caso especial, se este comando for seguido imediatamente por um caractere que não seja um dígito nem um sinal de menos, a contagem de argumentos para o próximo comando será multiplicada por quatro. A contagem de argumentos é inicialmente um, portanto, executar esta função na primeira vez faz com que o argumento conte quatro, uma segunda vez faz com que o argumento conte dezesseis e assim por diante.

Completando

complete (TAB)

Tente completar o texto antes do ponto. Bash tentativas de conclusão tratando o texto como uma variável (se o texto começar com $), nome de usuário (se o texto começar com ~), nome do host (se o texto começar com @) ou comando (incluindo aliases e funções) por sua vez. Se nenhum deles produzir uma correspondência, a conclusão do nome do arquivo será tentada.

possible-completions (M-?)

Liste as possíveis conclusões do texto antes do ponto.

insert-completions (M-*)

Insira todas as conclusões do texto antes do ponto que teria sido gerado por conclusões possíveis.

menu-complete

Semelhante a complete, mas substitui a palavra a ser completada por uma única correspondência da lista de possíveis completações. Execução repetida de etapas de menu completo por meio da lista de possíveis conclusões, inserindo cada correspondência por vez. No final da lista de conclusões, o sino é tocado (sujeito à configuração de estilo sino) e o texto original é restaurado. Um argumento de n move n posições para frente na lista de correspondências; um argumento negativo pode ser usado para retroceder na lista. Este comando deve ser vinculado a TAB, mas não é vinculado por padrão.

menu-complete-backward

Idêntico a menu completo, mas retrocede na lista de possíveis conclusões, como se menu completo tivesse recebido um argumento negativo. Este comando é desvinculado por padrão.

delete-char-or-list

Exclui o caractere sob o cursor se não estiver no início ou no final da linha (como delete-char). If no final da linha, comporta-se de forma idêntica a possible-completions. Este comando é desvinculado por padrão.

complete-filename (M-/)

Tente completar o nome do arquivo no texto antes do ponto.

possible-filename-completions (C-x /)

Liste as possíveis finalizações do texto antes do ponto, tratando-o como um nome de arquivo.

complete-username (M-~)

Tente completar o texto antes do ponto, tratando-o como um nome de usuário.

possible-username-completions (C-x ~)

Liste as possíveis finalizações do texto antes do ponto, tratando-o como um nome de usuário.

complete-variable (M-$)

Tente completar o texto antes do ponto, tratando-o como uma variável de shell.

possible-variable-completions (C-x $)

Liste as possíveis finalizações do texto antes do ponto, tratando-o como uma variável de shell.

complete-hostname (M-@)

Tente completar o texto antes do ponto, tratando-o como um nome de host.

possible-hostname-completions (C-x @)

Liste as possíveis finalizações do texto antes do ponto, tratando-o como um nome de host.

complete-command (M-!)

Tente completar o texto antes do ponto, tratando-o como um nome de comando. A conclusão do comando tenta corresponder o texto com aliases, palavras reservadas, funções de shell, built-ins de shell e, finalmente, nomes de arquivos executáveis, nessa ordem.

possible-command-completions (C-x !)

Liste as possíveis finalizações do texto antes do ponto, tratando-o como um nome de comando.

dynamic-complete-history (M-TAB)

Tente concluir o texto antes do ponto, comparando o texto com as linhas da lista de histórico para possíveis correspondências de conclusão.

dabbrev-expand

Tente a conclusão do menu no texto antes do ponto, comparando o texto com as linhas da lista de histórico para possíveis correspondências de conclusão.

complete-into-braces (M-{)

Execute a conclusão do nome do arquivo e insira a lista de possíveis conclusões entre chaves para que a lista esteja disponível para o shell (consulte Expansão de colchetes acima).

Macros do teclado

start-kbd-macro (C-x ( )

Comece salvando os caracteres digitados na macro de teclado atual.

end-kbd-macro (C-x ) )

Pare de salvar os caracteres digitados na macro de teclado atual e armazene a definição.

call-last-kbd-macro (C-x e)

Execute novamente a última macro de teclado definida, fazendo com que os caracteres na macro apareçam como se fossem digitados no teclado.

print-last-kbd-macro ()

Imprima a última macro de teclado definida em um formato adequado para o arquivo inputrc.

Diversos

re-read-init-file (C-x C-r)

Leia o conteúdo do arquivo inputrc e incorpore quaisquer ligações ou atribuições de variáveis encontradas lá.

abort (C-g)

Cancele o comando de edição atual e toque a campainha do terminal (sujeito à configuração estilo campainha).

do-lowercase-version (M-A, M-B, M-x, ...)

Se o caractere metafeito x for maiúsculo, execute o comando que está associado ao caractere metafico minúsculo correspondente. O comportamento é indefinido se x já estiver em letras minúsculas.

prefix-meta (ESC)

Metafy o próximo caractere digitado.

ESC f é equivalente a Meta-f.

undo (C-_, C-x C-u)

Desfazer incremental, lembrado separadamente para cada linha.

revert-line (M-r)

Desfaça todas as alterações feitas nesta linha. Isso é como executar o comando desfazer várias vezes para retornar a linha ao seu estado inicial.

tilde-expand (M-&)

Execute a expansão do til na palavra atual.

set-mark (C-@, M-<space>)

Defina a marca para o ponto. Se um argumento numérico for fornecido, a marca será definida para essa posição.

exchange-point-and-mark (C-x C-x)

Troque o ponto pela marca. A posição atual do cursor é definida para a posição salva e a posição antiga do cursor é salva como a marca.

character-search (C-])

Um caractere é lido e o ponto é movido para a próxima ocorrência desse caractere. Uma contagem negativa procura ocorrências anteriores.

character-search-backward (M-C-])

Um caractere é lido e o ponto é movido para a ocorrência anterior desse caractere. Uma contagem negativa procura ocorrências subsequentes.

skip-csi-sequence

Leia caracteres suficientes para consumir uma sequência de várias teclas, como aquelas definidas para teclas como Home e End. Essas sequências começam com um Indicador de Sequência de Controle (CSI), geralmente ESC-[. Se esta sequência estiver vinculada a "\[", as teclas que produzem tais sequências não terão efeito, a menos que explicitamente vinculadas a um comando readline, em vez de inserir caracteres perdidos no buffer de edição. Isso não é vinculado por padrão, mas geralmente vinculado a ESC-[.

insert-comment (M-#)

Sem um argumento numérico, o valor da variável readline comment-begin é inserido no início da linha atual. Se for fornecido um argumento numérico, este comando funciona como uma alternância: se os caracteres no início da linha não corresponderem ao valor de comment-begin, o valor é inserido, caso contrário, os caracteres em comment-begin são excluídos do início da linha. Em ambos os casos, a linha é aceita como se uma nova linha tivesse sido digitada. O valor padrão de comment-begin faz com que este comando transforme a linha atual em um comentário shell. Se um argumento numérico fizer com que o caractere de comentário seja removido, a linha será executada pelo shell.

glob-complete-word (M-g)

A palavra antes do ponto é tratada como um padrão para a expansão do nome do caminho, com um asterisco anexado implicitamente. Esse padrão é usado para gerar uma lista de nomes de arquivos correspondentes para possíveis conclusões.

glob-expand-word (C-x *)

A palavra antes do ponto é tratada como um padrão para a expansão do nome do caminho e a lista de nomes de arquivos correspondentes é inserida, substituindo a palavra. Se um argumento numérico for fornecido, um asterisco será acrescentado antes da expansão do nome do caminho.

glob-list-expansions (C-x g)

A lista de expansões que teriam sido geradas por glob-expand-word é exibida e a linha é redesenhada. Se um argumento numérico for fornecido, um asterisco será acrescentado antes da expansão do nome do caminho.

dump-functions

Imprima todas as funções e suas ligações de teclas para o fluxo de saída readline. Se um argumento numérico for fornecido, a saída será formatada de forma que possa fazer parte de um arquivo inputrc.

dump-variables

Imprima todas as variáveis readline configuráveis e seus valores para o fluxo de saída readline. Se um argumento numérico for fornecido, a saída será formatada de forma que possa fazer parte de um arquivo inputrc.

dump-macros

Imprima todas as sequências de teclas readline vinculadas a macros e as strings que elas produzem. Se um argumento numérico for fornecido, a saída será formatada de forma que possa fazer parte de um arquivo inputrc.

display-shell-version (C-x C-v)

Exibir informações de versão sobre a instância atual do bash.

Conclusão programável

Quando a conclusão de palavras é tentada para um argumento para um comando para o qual uma especificação de conclusão (um compspec) foi definida usando o builtin complete (consulte SHELL BUILTIN COMMANDS< abaixo), os recursos de conclusão programáveis são invocados.

Primeiro, o nome do comando é identificado. Se a palavra de comando for uma string vazia (tentativa de conclusão no início de uma linha vazia), qualquer compspec definido com a opção -E para concluir será usado. Se um compspec tiver sido definido para esse comando, o compspec será usado para gerar a lista de possíveis conclusões para a palavra. Se a palavra de comando for um nome de caminho completo, primeiro será pesquisado um compspec para o nome de caminho completo. Se nenhum compspec for encontrado para o nome de caminho completo, será feita uma tentativa de localizar um compspec para a parte após a barra final. Se essas pesquisas não resultarem em um compspec, qualquer compspec definido com a opção -D para concluir será usado como padrão. Se não houver nenhum compspec padrão, bash tenta a expansão do alias na palavra de comando como um recurso final e tenta encontrar um compspec para a palavra de comando de qualquer expansão bem-sucedida.

Depois que um compspec é encontrado, ele é usado para gerar a lista de palavras correspondentes. Se um compspec não for encontrado, a conclusão bash padrão, conforme descrito acima em Conclusão, será executada.

Primeiro, as ações especificadas pelo compspec são usadas. Apenas as correspondências que são prefixadas pela palavra que está sendo concluída são retornadas. Quando a opção -f ou -d é usada para preenchimento de nome de arquivo ou diretório, a variável shell FIGNORE é usada para filtrar as correspondências.

Quaisquer conclusões especificadas por um padrão de expansão de nome de caminho para a opção -G são geradas em seguida. As palavras geradas pelo padrão não precisam corresponder à palavra que está sendo completada. A variável shell GLOBIGNORE não é usada para filtrar as correspondências, mas a variável FIGNORE é usada.

Em seguida, a string especificada como argumento para a opção -W é considerada. A string é primeiro dividida usando os caracteres na variável especial IFS como delimitadores. A cotação da Shell é honrada. Cada palavra é então expandida usando expansão de colchetes, expansão de til, expansão de parâmetro e variável, substituição de comando e expansão aritmética, conforme descrito acima em EXPANSÃO. Os resultados são divididos usando as regras descritas acima em Divisão de palavras. Os resultados da expansão são comparados com o prefixo da palavra que está sendo concluída e as palavras correspondentes se tornam as possíveis conclusões.

Depois que essas correspondências forem geradas, qualquer função ou comando do shell especificado com as opções -F e -C será invocado. Quando o comando ou função é chamado, as variáveis COMP_LINE, COMP_POINT, COMP_KEY e COMP_TYPE recebem valores como descrito acima em Variáveis de shell. Se uma função shell estiver sendo invocada, as variáveis COMP_WORDS e COMP_CWORD também serão definidas. Quando a função ou comando é invocado, o primeiro argumento ($1) é o nome do comando cujos argumentos estão sendo completados, o segundo argumento ($2) é a palavra que está sendo concluída e o terceiro argumento ($3) é a palavra que precede a palavra que está sendo concluída na linha de comando atual. Nenhuma filtragem das conclusões geradas contra a palavra que está sendo concluída é executada; a função ou comando tem total liberdade na geração dos matchs.

Qualquer função especificada com -F é invocada primeiro. A função pode usar qualquer um dos recursos do shell, incluindo o compgen interno descrito abaixo, para gerar as correspondências. Deve colocar na variável do array COMPREPLY os possíveis completamentos, um por elemento do array.

Em seguida, qualquer comando especificado com a opção -C é chamado em um ambiente equivalente à substituição de comando. Ele deve imprimir uma lista de conclusões, uma por linha, na saída padrão. A barra invertida pode ser usada para escapar de uma nova linha, se necessário.

Depois que todas as conclusões possíveis são geradas, qualquer filtro especificado com a opção -X é aplicado à lista. O filtro é um padrão usado para expansão de nome de caminho; um & no padrão é substituído pelo texto da palavra que está sendo completada. Um & literal pode ser escapado com uma barra invertida; a barra invertida é removida antes de tentar uma correspondência. Qualquer conclusão que corresponda ao padrão será removida da lista. Um ! inicial nega o padrão; neste caso, qualquer conclusão que não corresponda ao padrão será removida. Se a opção de shell nocasematch estiver habilitada, a correspondência será executada sem levar em conta a capitalização dos caracteres alfabéticos.

Por fim, qualquer prefixo e sufixo especificados com as opções -P e -S são adicionados a cada membro da lista de conclusão e o resultado é retornado ao código de conclusão da linha de leitura como a lista de possíveis conclusões.

Se as ações aplicadas anteriormente não gerarem nenhuma correspondência e a opção -o dirnames tiver sido fornecida para concluir quando o compspec foi definido, a conclusão do nome do diretório será tentada.

Se a opção -o plusdirs foi fornecida para concluir quando o compspec foi definido, a conclusão do nome do diretório é tentada e todas as correspondências são incluídas nos resultados das outras ações.

Por padrão, se um compspec for encontrado, tudo o que ele gerar será retornado ao código de conclusão como o conjunto completo de possíveis conclusões. As conclusões bash padrão não são tentadas, e a linha de leitura padrão da conclusão do nome do arquivo é desativada. Se a opção -o bashdefault foi fornecida para concluir quando o compspec foi definido, as conclusões padrão bash serão tentadas se o compspec não gerar correspondências. Se a opção -o default foi fornecida para concluir quando o compspec foi definido, a conclusão padrão do readline será executada se o compspec (e, se tentado, o padrão bash conclusões) não geram correspondências.

Quando um compspec indica que a conclusão do nome do diretório é desejada, as funções de conclusão programáveis forçam o readline a anexar uma barra aos nomes completos que são links simbólicos para diretórios, sujeitos ao valor da variável mark-directories readline, independentemente da configuração da variável readline mark-symlinked-directories.

Há algum suporte para modificar conclusões dinamicamente. Isso é mais útil quando usado em combinação com uma conclusão padrão especificada com complete -D. É possível que as funções shell executadas como manipuladores de conclusão indiquem que a conclusão deve ser repetida retornando um status de saída de 124. Se uma função shell retornar 124 e alterar o compspec associado ao comando no qual a conclusão está sendo tentada (fornecido como o primeiro argumento quando a função é executada), a conclusão programável reinicia desde o início, com uma tentativa de encontrar um novo compspec para esse comando. Isso permite que um conjunto de conclusões seja criado dinamicamente à medida que a conclusão é tentada, em vez de ser carregado de uma só vez.

Por exemplo, supondo que haja uma biblioteca de compspecs, cada uma mantida em um arquivo correspondente ao nome do comando, a seguinte função de conclusão padrão carregaria as conclusões dinamicamente:

_completion_loader()
{
. "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124
}
complete -D -F _completion_loader -o bashdefault -o default

HISTÓRIA

Quando a opção -o history para o configurar embutido está habilitada, o shell fornece acesso ao histórico de comandos, a lista de comandos digitados anteriormente. O valor da variável HISTSIZE é usado como o número de comandos a serem salvos em uma lista de histórico. O texto dos últimos comandos HISTSIZE (padrão 500) é salvo.

O shell armazena cada comando na lista de histórico antes da expansão de parâmetros e variáveis (consulte EXPANSÃO acima), mas após a execução da expansão do histórico, sujeita aos valores das variáveis de shell HISTIGNORE e HISTCONTROL.

Na inicialização, o histórico é inicializado a partir do arquivo nomeado pela variável HISTFILE (padrão ~/.bash_history). O arquivo nomeado pelo valor de HISTFILE é truncado, se necessário, para conter não mais do que o número de linhas especificado pelo valor de HISTFILESIZE. Se HISTFILESIZE não for definido ou definido como nulo, um valor não numérico ou um valor numérico menor que zero, o arquivo de histórico não será truncado.

Quando o arquivo de histórico é lido, as linhas que começam com o caractere de comentário do histórico seguidas imediatamente por um dígito são interpretadas como carimbos de data/hora para a seguinte linha do histórico. Esses timestamps são exibidos opcionalmente dependendo do valor da variável HISTTIMEFORMAT. Quando um shell com histórico habilitado sai, as últimas linhas $HISTSIZE são copiadas da lista de histórico para $HISTFILE.

Se a opção de shell histappend estiver habilitada (veja a descrição de shopt em COMANDOS SHELL BUILTIN abaixo), as linhas serão anexadas ao arquivo de histórico, caso contrário, o arquivo de histórico será substituído. Se HISTFILE não for definido, ou se o arquivo de histórico não for gravável, o histórico não será salvo. Se a variável HISTTIMEFORMAT for definida, os carimbos de data/hora serão gravados no arquivo de histórico, marcados com o caractere de comentário do histórico, para que possam ser preservados nas sessões de shell. Isso usa o caractere de comentário do histórico para distinguir timestamps de outras linhas do histórico.

Depois de salvar o histórico, o arquivo de histórico é truncado para não conter mais do que HISTFILESIZE linhas. Se HISTFILESIZE não for definido ou definido como nulo, um valor não numérico ou um valor numérico menor que zero, o arquivo de histórico não será truncado.

O comando interno fc (consulte COMANDOS SHELL BUILTIN abaixo) pode ser usado para listar ou editar e reexecutar uma parte da lista de histórico. O histórico embutido pode ser usado para exibir ou modificar a lista de histórico e manipular o arquivo de histórico. Ao usar a edição de linha de comando, os comandos de pesquisa estão disponíveis em cada modo de edição que fornece acesso à lista de histórico.

O shell permite controlar quais comandos são salvos na lista de histórico. As variáveis HISTCONTROL e HISTIGNORE podem ser definidas para fazer com que o shell salve apenas um subconjunto dos comandos inseridos. A opção de shell cmdhist, se ativada, faz com que o shell tente salvar cada linha de um comando multilinha na mesma entrada de histórico, adicionando ponto e vírgula quando necessário para preservar a correção sintática. A opção de shell lithist faz com que o shell salve o comando com novas linhas incorporadas em vez de ponto e vírgula. Consulte a descrição do shopt integrado abaixo em COMANDOS CONSTRUÍDOS SHELL para obter informações sobre como configurar e desativar as opções do shell.

EXPANSÃO DA HISTÓRIA

O shell oferece suporte a um recurso de expansão de histórico semelhante à expansão de histórico em csh. Esta seção descreve quais recursos de sintaxe estão disponíveis. Este recurso é ativado por padrão para shells interativos e pode ser desativado usando a opção +H para o comando interno set (consulte COMANDOS SHELL BUILTIN abaixo). Shells não interativos não executam a expansão do histórico por padrão.

As expansões de histórico introduzem palavras da lista de histórico no fluxo de entrada, facilitando a repetição de comandos, a inserção de argumentos de um comando anterior na linha de entrada atual ou a correção rápida de erros em comandos anteriores.

A expansão do histórico é executada imediatamente após a leitura de uma linha completa, antes que o shell a quebre em palavras, e é executada em cada linha individualmente, sem levar em consideração as aspas nas linhas anteriores. Ocorre em duas partes. A primeira é determinar qual linha da lista de histórico usar durante a substituição. A segunda é selecionar partes dessa linha para inclusão na linha atual. A linha selecionada do histórico é o evento, e as partes dessa linha que são acionadas são palavras. Vários modificadores estão disponíveis para manipular as palavras selecionadas. A linha é dividida em palavras da mesma maneira que na leitura da entrada, de modo que várias palavras separadas por metacaracteres entre aspas são consideradas uma palavra. As expansões do histórico são introduzidas pela aparência do caractere de expansão do histórico, que é  !  por padrão. Somente barra invertida ( \ ) e aspas simples podem colocar aspas no caractere de expansão do histórico, mas o caractere de expansão do histórico também será tratado como aspas se preceder imediatamente as aspas duplas de fechamento em uma string com aspas duplas.

Vários caracteres inibem a expansão do histórico se encontrados imediatamente após o caractere de expansão do histórico, mesmo que não estejam entre aspas: espaço, tabulação, nova linha, retorno de carro e =. Se a opção de shell extglob estiver habilitada, ( também inibirá a expansão.

Várias opções de shell configuráveis com o shopt integrado podem ser usadas para ajustar o comportamento da expansão do histórico. Se a opção de shell histverify estiver habilitada (veja a descrição do shopt embutido abaixo) e readline estiver sendo usado, as substituições de histórico não serão imediatamente passado para o analisador de shell. Em vez disso, a linha expandida é recarregada no buffer de edição readline para modificações adicionais. Se readline estiver sendo usado e a opção de shell histreedit estiver ativada, uma substituição de histórico com falha será recarregada no buffer de edição readline para correção. A opção -p para o comando interno history pode ser usada para ver o que uma expansão de histórico fará antes de usá-la. A opção -s para o histórico embutido pode ser usada para adicionar comandos ao final da lista de histórico sem realmente executá-los, para que fiquem disponíveis para recuperação subsequente.

O shell permite o controle dos vários caracteres usados pelo mecanismo de expansão do histórico (consulte a descrição de histchars acima em Variáveis do Shell). O shell usa o caractere de comentário do histórico para marcar carimbos de data/hora do histórico ao gravar o arquivo de histórico.

Designadores de evento

Um designador de evento é uma referência a uma entrada de linha de comando na lista de histórico. A menos que a referência seja absoluta, os eventos são relativos à posição atual na lista de histórico.

!

Iniciar uma substituição de histórico, exceto quando seguido por em branco, nova linha, retorno de carro,=ou (quando a opção de shell extglob estiver habilitada usando o shopt integrado).

!n

Consulte a linha de comando n.

!-n

Consulte o comando atual menos n.

!!

Consulte o comando anterior. Este é um sinônimo para `!-1'.

!string

Consulte o comando mais recente que precede a posição atual na lista de histórico começando com string.

!?string[?]

Consulte o comando mais recente que precede a posição atual na lista de histórico contendo string. O ? final pode ser omitido se string for seguido imediatamente por uma nova linha. Se string estiver ausente, a string da pesquisa mais recente será usada; é um erro se não houver string de pesquisa anterior.

^string1^string2^

Substituição rápida. Repita o comando anterior, substituindo string1 por string2. Equivalente a ``!!:s^string1^string2^'' (veja Modificadores abaixo).

!#

Toda a linha de comando digitada até agora.

Designadores de palavras

Os designadores de palavras são usados para selecionar as palavras desejadas do evento. Um : separa a especificação do evento do designador da palavra. Pode ser omitido se a palavra designadora começar com ^, $, *, - ou %. As palavras são numeradas a partir do início da linha, sendo a primeira palavra indicada por 0 (zero). As palavras são inseridas na linha atual separadas por espaços simples.

0 (zero)

A palavra zero. Para o shell, esta é a palavra de comando.

n

A nésima palavra.

^

O primeiro argumento. Ou seja, palavra 1.

$

A última palavra. Geralmente, esse é o último argumento, mas se expandirá até a palavra zero se houver apenas uma palavra na linha.

%

A primeira palavra correspondente à `?string?' search, se a string de pesquisa começar com um caractere que faz parte de uma palavra.

x-y

Uma gama de palavras; `-y' abrevia `0-y'.

*

Todas as palavras, exceto o zero. Este é um sinônimo para `1-$'. Não é um erro usar * se houver apenas uma palavra no evento; a string vazia é retornada nesse caso.

x*

Abrevia x-$.

x-

Abrevia x-$ como x*, mas omite a última palavra. Se x estiver ausente, o padrão será 0.

Se um designador de palavra for fornecido sem uma especificação de evento, o comando anterior será usado como o evento.

Modificadores

Após o designador de palavra opcional, pode aparecer uma sequência de um ou mais dos seguintes modificadores, cada um precedido por um ':'. Eles modificam ou editam a palavra ou palavras selecionadas no evento do histórico.

h

Remova um componente de nome de arquivo à direita, deixando apenas a cabeça.

t

Remova todos os componentes principais do nome de arquivo, deixando a cauda.

r

Remova um sufixo final no formato .xxx, deixando o nome base.

e

Remova tudo, exceto o sufixo à direita.

p

Imprima o novo comando, mas não o execute.

q

Cite as palavras substituídas, evitando outras substituições.

x

Cite as palavras substituídas como q, mas divida as palavras em brancos e novas linhas. Os modificadores q e x são mutuamente exclusivos; o último fornecido é usado.

s/old/new/

Substitua novo pela primeira ocorrência de velho na linha do evento. Qualquer caractere pode ser usado como delimitador no lugar de /. O delimitador final é opcional se for o último caractere da linha do evento. O delimitador pode ser citado em antigo e novo com uma única barra invertida. Se & aparecer em novo, será substituído por antigo. Uma única barra invertida irá citar o &. Se old for nulo, ele será definido como o último old substituído ou, se nenhuma substituição de histórico anterior tiver ocorrido, a última string em um !?string[?] pesquisa. Se novo for nulo, cada antigo correspondente será excluído.

&

Repita a substituição anterior.

g

Faça com que as alterações sejam aplicadas em toda a linha do evento. Isso é usado em conjunto com `:s' (por exemplo, `:gs/antigo/ novo/') ou `:&'. Se usado com `:s', qualquer delimitador pode ser usado no lugar de /, e o delimitador final é opcional se for o último caractere da linha do evento. Um a pode ser usado como sinônimo de g.

G

Aplique o seguinte modificador `s' ou `&' uma vez para cada palavra na linha de evento.

COMANDOS CONSTRUÍDOS SHELL

Salvo indicação em contrário, cada comando integrado documentado nesta seção como aceitando opções precedidas por - aceita -- para significar o fim das opções. Os builtins :, true, false e test/[ não aceitam opções e não trate -- de forma especial. A sair, logout, voltar, interromper, continuar, deixar e os builtins shift aceitam e processam argumentos que começam com - sem exigir --. Outros builtins que aceitam argumentos, mas não são especificados como opções de aceitação, interpretam argumentos que começam com - como opções inválidas e requerem -- para evitar essa interpretação.

: [arguments]

Sem efeito; o comando não faz nada além de expandir argumentos e executar quaisquer redirecionamentos especificados. O status de retorno é zero.

.  filename [arguments]
source filename [arguments]

Lê e executa comandos de filename no ambiente shell atual e retorna o status de saída do último comando executado de filename. Se filename não contiver uma barra, os nomes de arquivo em PATH serão usados para localizar o diretório que contém filename. O arquivo procurado em PATH não precisa ser executável. Quando bash não está no modo posix, o diretório atual é pesquisado se nenhum arquivo for encontrado em PATH. Se a opção sourcepath para o comando interno shopt estiver desativada, o PATH não será pesquisado. Se quaisquer argumentos forem fornecidos, eles se tornarão os parâmetros posicionais quando filename for executado.

Caso contrário, os parâmetros posicionais permanecem inalterados. Se a opção -T estiver habilitada, source herda qualquer trap em DEBUG; se não for, qualquer string de trap DEBUG é salva e restaurada em torno da chamada para source, e source desativa o DEBUGtrap enquanto executa. Se -T não for definido e o arquivo de origem alterar a armadilha DEBUG, o novo valor será retido quando source for concluído. O status de retorno é o status do último comando encerrado no script (0 se nenhum comando for executado) e false se filename não for encontrado ou não puder ser lido.

alias [-p] [name[=value] ...]

Alias sem argumentos ou com a opção -p imprime a lista de aliases no formato alias nome=<valor na saída padrão. Quando os argumentos são fornecidos, um alias é definido para cada nome cujo valor é fornecido. Um espaço à direita em valor faz com que a próxima palavra seja verificada para substituição de alias quando o alias é expandido. Para cada nome na lista de argumentos para o qual nenhum valor é fornecido, o nome e o valor do alias são impressos. Alias retorna verdadeiro, a menos que seja fornecido um nome para o qual nenhum alias tenha sido definido.

bg [jobspec ...]

Retome cada tarefa suspensa jobspec em segundo plano, como se tivesse sido iniciada com &. Se jobspec não estiver presente, a noção do shell do trabalho atual será usada. bg jobspec retorna 0, a menos que seja executado quando o controle de trabalho estiver desativado ou, quando executado com o controle de trabalho ativado, qualquer jobspec especificado não foi encontrado ou foi iniciado sem controle de trabalho.

bind [-m keymap] [-lpsvPSVX]
bind [-m keymap] [-q function] [-u function] [-r keyseq]
bind [-m keymap] -f filename
bind [-m keymap] -x keyseq:shell-command
bind [-m keymap] keyseq:function-name
bind [-m keymap] keyseq:readline-command

Exiba as ligações de tecla e função readline atuais, vincule uma sequência de teclas a uma função ou macro readline ou defina uma variável readline. Cada argumento sem opção é um comando como apareceria em .inputrc, mas cada associação ou comando deve ser passado como um argumento separado; por exemplo, '"\C-x\C-r": reler o arquivo de inicialização'. As opções, se fornecidas, têm os seguintes significados:

-m keymap

Use keymap como o mapa de teclado a ser afetado pelas vinculações subsequentes. Os nomes de keymap aceitáveis são emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command e vi-insert. vi é equivalente a vi-command (vi-move também é um sinônimo); emacs é equivalente a emacs-standard.

-l

Liste os nomes de todas as funções readline.

-p

Exiba os nomes e associações de função readline de forma que possam ser relidos.

-P

Liste os nomes e ligações das funções readline atuais.

-s

Exibir sequências de teclas readline vinculadas a macros e as strings que elas geram de forma que possam ser relidas.

-S

Exibir sequências de teclas readline vinculadas a macros e as strings que elas geram.

-v

Exiba nomes e valores de variáveis readline de forma que possam ser relidos.

-V

Liste os nomes e valores das variáveis readline atuais.

-f filename

Leia as ligações de teclas de filename.

-q function

Consulta sobre quais teclas invocam a função nomeada.

-u function

Desvincule todas as chaves vinculadas à função nomeada.

-r keyseq

Remova qualquer ligação atual para keyseq.

-x keyseq:shell-command

Faça com que shell-command seja executado sempre que keyseq for inserido. Quando shell-command é executado, o shell define a variável READLINE_LINE para o conteúdo do buffer de linha readline e o READLINE_POINT e READLINE_MARK para o local atual do ponto de inserção e o ponto de inserção salvo (a marca), respectivamente.

Se o comando executado alterar o valor de qualquer um dos READLINE_LINE, READLINE_POINT ou READLINE_MARK, esses novos valores serão refletidos no estado de edição.

-X

Liste todas as sequências de teclas vinculadas aos comandos do shell e os comandos associados em um formato que possa ser reutilizado como entrada.

O valor de retorno é 0, a menos que uma opção não reconhecida seja fornecida ou ocorra um erro.

break [n]

Sair de um loop for, while, until ou selecionar. Se n for especificado, quebre n níveis. n deve ser ≥ 1. Se n for maior que o número de loops envolventes, todos os loops envolventes serão encerrados. O valor de retorno é 0, a menos que n não seja maior ou igual a 1.

builtin shell-builtin [arguments]

Execute o shell interno especificado, passando argumentos e retorne seu status de saída. Isso é útil ao definir uma função cujo nome é o mesmo de um shell interno, mantendo a funcionalidade do interno dentro da função. O builtin cd é normalmente redefinido desta forma. O status de retorno é falso se shell-builtin não for um comando interno do shell.

caller [expr]

Retorna o contexto de qualquer chamada de sub-rotina ativa (uma função shell ou um script executado com os builtins . ou source). Sem expr, caller exibe o número da linha e o nome do arquivo de origem da chamada de sub-rotina atual. Se um inteiro não negativo for fornecido como expr, caller exibe o número da linha, nome da sub-rotina e arquivo de origem correspondente a essa posição na pilha de chamada de execução atual. Essas informações extras podem ser usadas, por exemplo, para imprimir um rastreamento de pilha. O quadro atual é o quadro 0. O valor de retorno é 0, a menos que o shell não esteja executando uma chamada de sub-rotina ou expr não corresponda a uma posição válida na pilha de chamadas.

cd [-L|[-P [-e]] [-@]] [dir]

Altere o diretório atual para dir. se dir não for fornecido, o valor da variável shell HOME será o padrão. Quaisquer argumentos adicionais após dir são ignorados. A variável CDPATH define o caminho de pesquisa para o diretório que contém dir: cada nome de diretório em CDPATH é pesquisado por dir .

Nomes de diretórios alternativos em CDPATH são separados por dois pontos (:). Um nome de diretório nulo em CDPATH é o mesmo que o diretório atual, ou seja, ``.''. Se dir começar com uma barra (/), CDPATH não será usado. A opção -P faz com que cd use a estrutura de diretórios físicos resolvendo links simbólicos enquanto atravessa dir e antes de processar instâncias de . em dir (veja também a opção -P para o comando interno set); a opção -L força links simbólicos a serem seguidos resolvendo o link após o processamento de instâncias de .. em dir.

Se .. aparecer em dir, ele será processado removendo o componente de nome de caminho imediatamente anterior de dir, de volta para uma barra ou no início de <dir. Se a opção -e for fornecida com -P e o diretório de trabalho atual não puder ser determinado com sucesso após uma mudança de diretório bem-sucedida, cd retornará um estado mal sucedido. Em sistemas que o suportam, a opção -@ apresenta os atributos estendidos associados a um arquivo como um diretório.

Um argumento de - é convertido em $OLDPWD antes da tentativa de alteração do diretório. Se um nome de diretório não vazio de CDPATH for usado, ou se - for o primeiro argumento e a mudança de diretório for bem-sucedida, o caminho absoluto do novo diretório de trabalho será gravado na saída padrão. O valor de retorno é true se o diretório foi alterado com sucesso; caso contrário, falso.

command [-pVv] command [arg ...]

Execute comando com args suprimindo a pesquisa de função shell normal. Somente comandos internos ou comandos encontrados em PATH são executados. Se a opção -p for fornecida, a pesquisa por comando é realizada usando um valor padrão para PATH que garante encontrar todos os padrões Serviços de utilidade pública. Se a opção -V ou -v for fornecida, uma descrição do comando será impressa.

A opção -v faz com que uma única palavra indicando o comando ou nome de arquivo usado para invocar comando seja exibida; a opção -V produz uma descrição mais detalhada. Se a opção -V ou -v for fornecida, o status de saída será 0 se o comando for encontrado e 1 se não for. Se nenhuma opção for fornecida e ocorrer um erro ou comando não puder ser encontrado, o status de saída é 127. Caso contrário, o status de saída do comando integrado é o status de saída de <comando.

compgen [option] [word]

Gera possíveis correspondências de conclusão para palavra de acordo com as opçõess, que podem ser qualquer opção aceita pelo integrado completo, com exceção de -p e -r e grave as correspondências na saída padrão. Ao usar as opções -F ou -C, as várias variáveis de shell definidas pelos recursos de conclusão programável, enquanto disponíveis, não terão valores úteis.

As correspondências serão geradas da mesma forma como se o código de conclusão programável as tivesse gerado diretamente de uma especificação de conclusão com os mesmos sinalizadores. Se palavra for especificada, apenas as conclusões correspondentes à palavra serão exibidas.

O valor de retorno é verdadeiro, a menos que uma opção inválida seja fornecida ou nenhuma correspondência tenha sido gerada.

complete [-abcdefgjksuv] [-o comp-option] [-DEI] [-A action] [-G globpat] [-W wordlist]
[-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] name [name ...]
complete -pr [-DEI] [name ...]

Especifique como os argumentos para cada nome devem ser preenchidos. Se a opção -p for fornecida, ou se nenhuma opção for fornecida, as especificações de conclusão existentes serão impressas de forma a permitir que sejam reutilizadas como entrada. A opção -r remove uma especificação de conclusão para cada nome ou, se nenhum nome for fornecido, todas as especificações de conclusão. A opção -D indica que outras opções e ações fornecidas devem se aplicar à conclusão do comando ``padrão''; ou seja, tentativa de conclusão em um comando para o qual nenhuma conclusão foi definida anteriormente. A opção -E indica que outras opções e ações fornecidas devem se aplicar à conclusão do comando ``empty''; ou seja, tentativa de conclusão em uma linha em branco. A opção -I indica que outras opções e ações fornecidas devem ser aplicadas à conclusão na palavra inicial sem atribuição na linha ou após um delimitador de comando, como ; ou |, que geralmente é a conclusão do nome do comando. Se várias opções forem fornecidas, a opção -D terá precedência sobre -E e ambas terão precedência sobre -I. Se qualquer um dos -D, -E ou -I for fornecido, qualquer outro argumento name será ignorado; essas conclusões se aplicam apenas ao caso especificado pela opção.

O processo de aplicação dessas especificações de conclusão quando a conclusão de palavras é tentada é descrito acima em Conclusão programável.

Outras opções, se especificadas, têm os seguintes significados. Os argumentos para as opções -G, -W e -X (e, se necessário, -P > e as opções -S) devem ser colocadas entre aspas para protegê-las da expansão antes que o builtin completo seja invocado.

-o comp-option

A comp-option controla vários aspectos do comportamento do compspec além da simples geração de conclusões. comp-option pode ser um dos seguintes:

bashdefault

Execute o restante das conclusões bash padrão se o compspec não gerar correspondências.

default

Use a conclusão do nome de arquivo padrão do readline se o compspec não gerar correspondências.

dirnames

Execute a conclusão do nome do diretório se o compspec não gerar correspondências.

filenames

Diga a readline que o compspec gera nomes de arquivo, para que ele possa executar qualquer processamento específico de nome de arquivo (como adicionar uma barra aos nomes de diretório, citar caracteres especiais ou suprimir espaços à direita). Destina-se a ser usado com funções de shell.

noquote

Diga ao readline para não citar as palavras completas se forem nomes de arquivo (o padrão é citar nomes de arquivo).

nosort

Diga ao readline para não classificar a lista de possíveis conclusões em ordem alfabética.

nospace

Diga ao readline para não acrescentar um espaço (o padrão) às palavras concluídas no final da linha.

plusdirs

Depois que todas as correspondências definidas pelo compspec são geradas, a conclusão do nome do diretório é tentada e todas as correspondências são incluídas nos resultados das outras ações.

-A action

A ação pode ser uma das seguintes para gerar uma lista de possíveis conclusões:

alias

Nomes alternativos. Também pode ser especificado como -a.

arrayvar

Nomes de variáveis de matriz.

binding

Readline nomes de ligação de chave.

builtin

Nomes de comandos internos do shell. Também pode ser especificado como -b.

command

Nomes de comando. Também pode ser especificado como -c.

directory

Nomes de diretório. Também pode ser especificado como -d.

disabled

Nomes de builtins de shell desabilitados.

enabled

Nomes de builtins de shell habilitados.

export

Nomes de variáveis de shell exportadas. Também pode ser especificado como -e.

file

Nomes de arquivo. Também pode ser especificado como -f.

function

Nomes de funções de shell.

group

Nomes de grupo. Também pode ser especificado como -g.

helptopic

Tópicos de ajuda conforme aceitos pelo integrado ajuda.

hostname

Nomes de host, conforme obtidos do arquivo especificado pela variável shell HOSTFILE.

job

Nomes de trabalho, se o controle de trabalho estiver ativo. Também pode ser especificado como -j.

keyword

Shell palavras reservadas. Também pode ser especificado como -k.

running

Nomes de tarefas em execução, se o controle de tarefas estiver ativo.

service

Nomes de serviço. Também pode ser especificado como -s.

setopt

Argumentos válidos para a opção -o para o builtin set.

shopt

Nomes de opções de shell conforme aceitos pelo builtin shopt.

signal

Nomes de sinais.

stopped

Nomes de trabalhos interrompidos, se o controle de trabalho estiver ativo.

user

Nomes de usuário. Também pode ser especificado como -u.

variable

Nomes de todas as variáveis do shell. Também pode ser especificado como -v.

-C command

O comando é executado em um ambiente de subshell e sua saída é usada como as possíveis conclusões.

-F function

A função shell função é executada no ambiente shell atual. Quando a função é executada, o primeiro argumento ($1) é o nome do comando cujos argumentos estão sendo completados, o segundo argumento ($2) é a palavra que está sendo completada, e o terceiro argumento ($3) é a palavra que precede a palavra que está sendo completada na linha de comando atual. Quando termina, as possíveis conclusões são recuperadas do valor da variável de array COMPREPLY.

-G globpat

O padrão de expansão do nome do caminho globpat é expandido para gerar as possíveis conclusões.

-P prefix

prefixo é adicionado no início de cada conclusão possível após todas as outras opções terem sido aplicadas.

-S suffix

sufixo é anexado a cada conclusão possível após todas as outras opções terem sido aplicadas.

-W wordlist

A wordlist é dividida usando os caracteres na variável especial IFS como delimitadores, e cada palavra resultante é expandida. A citação de shell é respeitada em wordlist, a fim de fornecer um mecanismo para as palavras conterem metacaracteres ou caracteres de shell no valor de IFS. As possíveis conclusões são os membros da lista resultante que correspondem à palavra que está sendo concluída.

-X filterpat

filterpat é um padrão usado para expansão de nome de caminho. Ele é aplicado à lista de possíveis conclusões geradas pelas opções e argumentos anteriores, e cada conclusão correspondente a filterpat é removida da lista. Um ! inicial em filterpat nega o padrão; neste caso, qualquer conclusão que não corresponda a filterpat é removida.

O valor de retorno é verdadeiro, a menos que uma opção inválida seja fornecida, uma opção diferente de -p ou -r seja fornecida sem um argumento name, um foi feita uma tentativa de remover uma especificação de conclusão para um nome para o qual não existe nenhuma especificação ou ocorreu um erro ao adicionar uma especificação de conclusão.

compopt [-o option] [-DEI] [+o option] [name]

Modifique as opções de conclusão para cada nome de acordo com as opçõess, ou para a conclusão atualmente em execução se nenhum nome for fornecido. Se nenhuma opção for fornecida, exiba as opções de conclusão para cada nome ou a conclusão atual. Os valores possíveis de option são aqueles válidos para o builtin completo descrito acima. A opção -D indica que outras opções fornecidas devem se aplicar à conclusão do comando ``padrão''; ou seja, tentativa de conclusão em um comando para o qual nenhuma conclusão foi definida anteriormente. A opção -E indica que outras opções fornecidas devem se aplicar à conclusão do comando ``empty''; ou seja, tentativa de conclusão em uma linha em branco. A opção -I indica que outras opções fornecidas devem ser aplicadas à conclusão na palavra inicial sem atribuição na linha ou após um delimitador de comando, como ; ou |, que geralmente é a conclusão do nome do comando.

O valor de retorno é verdadeiro, a menos que uma opção inválida seja fornecida, seja feita uma tentativa de modificar as opções para um nome para o qual não existe nenhuma especificação de conclusão ou ocorra um erro de saída.

continue [n]

Retome a próxima iteração do loop envolvente for, while, until ou select. Se n for especificado, recomeça no nésimo loop envolvente. n deve ser ≥ 1. Se n for maior que o número de loops envolventes, o último loop envolvente (o loop ``top-level'') é retomado. O valor de retorno é 0, a menos que n não seja maior ou igual a 1.

declare [-aAfFgiIlnrtux] [-p] [name[=value] ...]
typeset [-aAfFgiIlnrtux] [-p] [name[=value] ...]

Declare variáveis e/ou dê a elas atributos. Se nenhum nome for fornecido, exiba os valores das variáveis. A opção -p exibirá os atributos e valores de cada nome. Quando -p é usado com argumentos name, opções adicionais, além de -f e -F, são ignoradas . Quando -p é fornecido sem argumentos name, ele exibirá os atributos e valores de todas as variáveis com os atributos especificados pelas opções adicionais. Se nenhuma outra opção for fornecida com -p, declarar exibirá os atributos e valores de todas as variáveis do shell. A opção -f restringirá a exibição às funções do shell. A opção -F inibe a exibição de definições de funções; apenas o nome da função e os atributos são impressos. Se a opção de shell extdebug estiver habilitada usando shopt, o nome do arquivo de origem e o número da linha onde cada nome está definido também serão exibidos. A opção -F implica -f. A opção -g força variáveis a serem criadas ou modificadas no escopo global, mesmo quando declarar é executado em uma função shell. É ignorado em todos os outros casos. A opção -I faz com que as variáveis locais herdem os atributos (exceto o atributo nameref) e o valor de qualquer variável existente com o mesmo nome em um escopo circundante. Se não houver variável existente, a variável local é inicialmente desdefinida. As opções a seguir podem ser usadas para restringir a saída a variáveis com o atributo especificado ou para fornecer atributos de variáveis:

-a

Cada nome é uma variável de matriz indexada (consulte Matrizes acima).

-A

Cada nome é uma variável de matriz associativa (consulte Matrizes acima).

-f

Use apenas nomes de funções.

-i

A variável é tratada como um inteiro; a avaliação aritmética (consulte AVALIAÇÃO ARITMÉTICA acima) é executada quando a variável recebe um valor.

-l

Quando a variável recebe um valor, todos os caracteres maiúsculos são convertidos em minúsculos. O atributo de letras maiúsculas está desabilitado.

-n

Dê a cada nome o atributo nameref, tornando-o uma referência de nome para outra variável. Essa outra variável é definida pelo valor de nome. Todas as referências, atribuições e modificações de atributo para nome, exceto aquelas que usam ou alteram o próprio atributo -n, são executadas na variável referenciada por nome valor. O atributo nameref não pode ser aplicado a variáveis de matriz.

-r

Torne os names somente leitura. Esses nomes não podem receber valores atribuídos por instruções de atribuição subsequentes ou não definidos.

-t

Dê a cada nome o atributo traço. As funções rastreadas herdam as armadilhas DEBUG e RETURN do shell de chamada. O atributo trace não tem nenhum significado especial para variáveis.

-u

Quando a variável recebe um valor, todos os caracteres minúsculos são convertidos em maiúsculas. O atributo de letras minúsculas está desabilitado.

-x

Marque nomes para exportar para comandos subsequentes por meio do ambiente.

Usar `+' em vez de `-' desativa o atributo, com a exceção de que +a e +A não podem ser usados para destruir variáveis de array e +r não removerá o atributo somente leitura. Quando usado em uma função, declare e typeset tornam cada nome local, como no comando local, a menos que o A opção -g é fornecida. Se um nome de variável for seguido por =valor, o valor da variável será definido como valor. Ao usar -a ou -A e a sintaxe de atribuição composta para criar variáveis de matriz, os atributos adicionais não terão efeito até as atribuições subsequentes. O valor de retorno é 0, a menos que uma opção inválida seja encontrada, seja feita uma tentativa de definir uma função usando ``-f foo=bar'', seja feita uma tentativa de atribuir um valor a uma variável readonly, seja feita uma tentativa de atribuir um valor para uma variável de matriz sem usar a sintaxe de atribuição composta (consulte Arrays acima), um dos nomes não é um nome de variável de shell válido, é feita uma tentativa de transformar off readonly status para uma variável readonly, uma tentativa é feita para desligar o array status para uma variável array, ou uma tentativa é feita para exibir uma função inexistente com -f.

dirs [-clpv] [+n] [-n]

Sem opções, exibe a lista de diretórios atualmente lembrados. A exibição padrão é em uma única linha com nomes de diretório separados por espaços. Os diretórios são adicionados à lista com o comando pushd; o comando popd remove as entradas da lista. O diretório atual é sempre o primeiro diretório na pilha.

-c

Limpa a pilha de diretórios excluindo todas as entradas.

-l

Produz uma listagem usando nomes de caminho completos; o formato de listagem padrão usa um til para denotar o diretório inicial.

-p

Imprima a pilha de diretórios com uma entrada por linha.

-v

Imprima a pilha de diretórios com uma entrada por linha, prefixando cada entrada com seu índice na pilha.

+n

Exibe a nª entrada contando a partir da esquerda da lista mostrada por dirs quando invocada sem opções, começando com zero.

-n

Exibe a nª entrada contando à direita da lista mostrada por dirs quando invocada sem opções, começando com zero.

O valor de retorno é 0, a menos que uma opção inválida seja fornecida ou n índices além do final da pilha de diretórios.

disown [-ar] [-h] [jobspec ... | pid ... ]

Sem opções, remova cada jobspec da tabela de trabalhos ativos. Se jobspec não estiver presente e nem a opção -a nem -r for fornecida, o trabalho atual é usado. Se a opção -h for fornecida, cada jobspec não será removido da tabela, mas será marcado para que SIGHUP não seja enviado para o trabalho se o shell receber um SIGHUP. Se nenhum jobspec for fornecido, a opção -a significa remover ou marcar todos os trabalhos; a opção -r sem um argumento jobspec restringe a operação a tarefas em execução. O valor de retorno é 0, a menos que um jobspec não especifique um trabalho válido.

echo [-neE] [arg ...]

Imprima os args, separados por espaços, seguidos por uma nova linha. O status de retorno é 0, a menos que ocorra um erro de gravação. Se -n for especificado, a nova linha à direita será suprimida. Se a opção -e for fornecida, a interpretação dos seguintes caracteres de escape de barra invertida será ativada. A opção -E desativa a interpretação desses caracteres de escape, mesmo em sistemas onde eles são interpretados por padrão. A opção de shell xpg_echo pode ser usada para determinar dinamicamente se echo expande ou não esses caracteres de escape por padrão. echo não interpreta -- como o fim das opções. echo interpreta as seguintes sequências de escape:

\a

alerta (campainha)

\b

backspace

\c

suprimir mais saída

\e
\E

um personagem de fuga

\f

feed de formulário

\n

nova linha

\r

retorno de carruagem

\t

guia horizontal

\v

guia vertical

\\

barra invertida

\0nnn

o caractere de oito bits cujo valor é o valor octal nnn (zero a três dígitos octais)

\xHH

o caractere de oito bits cujo valor é o valor hexadecimal HH (um ou dois dígitos hexadecimais)

\uHHHH

o caractere Unicode (ISO/IEC 10646) cujo valor é o valor hexadecimal HHHH (um a quatro dígitos hexadecimais)

\UHHHHHHHH

o caractere Unicode (ISO/IEC 10646) cujo valor é o valor hexadecimal HHHHHHHH (um a oito dígitos hexadecimais)

enable [-a] [-dnps] [-f filename] [name ...]

Habilitar e desabilitar os comandos internos do shell. Desativar um builtin permite que um comando de disco que tenha o mesmo nome de um shell interno seja executado sem especificar um nome de caminho completo, mesmo que o shell normalmente procure por builtins antes dos comandos de disco. Se -n for usado, cada nome será desabilitado; caso contrário, nomes são ativados. Por exemplo, para usar o binário test encontrado via PATH em vez da versão interna do shell, execute ``enable -n test''. A opção -f significa carregar o novo comando interno name do objeto compartilhado filename, em sistemas que suportam carregamento dinâmico. A opção -d excluirá um builtin previamente carregado com -f. Se nenhum argumento name for fornecido, ou se a opção -p for fornecida, uma lista de comandos internos do shell será impressa. Sem outros argumentos de opção, a lista consiste em todos os builtins de shell ativados. Se -n for fornecido, apenas os builtins desabilitados serão exibidos. Se -a for fornecido, a lista impressa inclui todos os builtins, com uma indicação se cada um está ativado ou não. Se -s for fornecido, a saída é restrita aos builtins POSIX especiais. O valor de retorno é 0, a menos que um nome não seja um shell embutido ou haja um erro ao carregar um novo embutido de um objeto compartilhado.

eval [arg ...]

Os args são lidos e concatenados em um único comando. Este comando é então lido e executado pelo shell, e seu status de saída é retornado como o valor de eval. Se não houver args ou apenas argumentos nulos, eval retornará 0.

exec [-cl] [-a name] [command [arguments]]

Se comando for especificado, ele substituirá o shell. Nenhum novo processo é criado. Os argumentos tornam-se os argumentos do comando. Se a opção -l for fornecida, o shell colocará um traço no início do argumento zero passado para comando. Isso é o que login(1) faz. A opção -c faz com que o comando seja executado com um ambiente vazio. Se -a for fornecido, o shell passará nome como o argumento zero para o comando executado. Se o comando não puder ser executado por algum motivo, um shell não interativo será encerrado, a menos que a opção de shell execfail esteja habilitada. Nesse caso, ele retorna falha. Um shell interativo retorna falha se o arquivo não puder ser executado. Um subshell sai incondicionalmente se exec falhar. Se comando não for especificado, qualquer redirecionamento entrará em vigor no shell atual e o status de retorno será 0. Se houver um erro de redirecionamento, o status de retorno será 1.

exit [n]

Faz com que o shell saia com um status de n. Se n for omitido, o status de saída é o do último comando executado. Uma armadilha em EXIT é executada antes que o shell termine.

export [-fn ] [name[=word]] ...
export -p

Os nomes fornecidos são marcados para exportação automática para o ambiente de comandos executados posteriormente. Se a opção -f for fornecida, os nomes referem-se a funções. Se nenhum nome for fornecido, ou se a opção -p for fornecida, uma lista de nomes de todas as variáveis exportadas será impressa. A opção -n faz com que a propriedade de exportação seja removida de cada nome. Se o nome de uma variável for seguido por =palavra, o valor da variável será definido como palavra. export retorna um status de saída de 0, a menos que uma opção inválida seja encontrada, um dos nomes não seja um nome de variável de shell válido ou -f é fornecido com um nome que não é uma função.

fc [-e ename] [-lnr] [first] [last]
fc -s [pat=rep] [cmd]

O primeiro formulário seleciona um intervalo de comandos do primeiro ao último da lista de histórico e os exibe ou edita e os executa novamente. First e last podem ser especificados como uma string (para localizar o último comando começando com essa string) ou como um número (um índice na lista de histórico, onde um número negativo é usado como um deslocamento do número de comando atual). Ao listar, um primeiro ou último de 0 é equivalente a -1 e -0 é equivalente ao comando atual (geralmente o comando fc) ; caso contrário, 0 é equivalente a -1 e -0 é inválido. Se último não for especificado, ele será definido como o comando atual para listagem (de forma que ``fc -l -10'' imprima os últimos 10 comandos) e como primeiro de outra forma. Se primeiro não for especificado, ele será definido como o comando anterior para edição e -16 para listagem.

A opção -n suprime os números de comando ao listar. A opção -r inverte a ordem dos comandos. Se a opção -l for fornecida, os comandos serão listados na saída padrão. Caso contrário, o editor fornecido por ename é invocado em um arquivo contendo esses comandos. Se ename não for fornecido, o valor da variável FCEDIT é usado e o valor de EDITOR se FCEDIT não está definido. Se nenhuma variável for definida,  vi  será usado. Quando a edição estiver concluída, os comandos editados são repetidos e executados.

Na segunda forma, comando é executado novamente após cada instância de pat ser substituída por rep. Comando é interpretado da mesma forma que primeiro acima. Um alias útil para usar com isso é ``r="fc -s"'', de modo que digitar ``r cc'' executa o último comando começando com ``cc'' e digitar ``r'' reexecuta o último comando.

Se a primeira forma for usada, o valor de retorno será 0, a menos que uma opção inválida seja encontrada ou primeiro ou último especifique as linhas do histórico fora do intervalo. Se a opção -e for fornecida, o valor de retorno é o valor do último comando executado ou falha se ocorrer um erro com o arquivo temporário de comandos. Se o segundo formulário for usado, o status de retorno é o do comando reexecutado, a menos que cmd não especifique uma linha de histórico válida, caso em que fc retorna falha.

fg [jobspec]

Resume jobspec em primeiro plano e torne-o o trabalho atual. Se jobspec não estiver presente, a noção do shell do trabalho atual será usada. O valor de retorno é o do comando colocado em primeiro plano, ou falha se for executado quando o controle de tarefas estiver desabilitado ou, quando executado com o controle de tarefas ativado, se jobspec não especificar uma tarefa válida ou jobspec especifica um trabalho que foi iniciado sem controle de trabalho.

getopts optstring name [arg ...]

getopts é usado por procedimentos de shell para analisar parâmetros posicionais. optstring contém os caracteres de opção a serem reconhecidos; se um caractere for seguido por dois pontos, espera-se que a opção tenha um argumento, que deve ser separado por um espaço em branco. Os caracteres de dois pontos e ponto de interrogação não podem ser usados como caracteres de opção. Cada vez que é invocado, getopts coloca a próxima opção na variável shell name, inicializando name se não existir, e o índice de o próximo argumento a ser processado na variável OPTIND.

OPTIND é inicializado com 1 cada vez que o shell ou um script de shell é invocado. Quando uma opção requer um argumento, getopts coloca esse argumento na variável

OPTARG. O shell não redefine OPTIND automaticamente; ele deve ser redefinido manualmente entre várias chamadas para getopts na mesma invocação de shell se um novo conjunto de parâmetros for usado.

Quando o fim das opções é encontrado, getopts sai com um valor de retorno maior que zero.

OPTIND é definido como o índice do primeiro argumento sem opção e name é definido como ?.

getopts normalmente analisa os parâmetros posicionais, mas se mais argumentos forem fornecidos como valores arg, getopts os analisará.

getopts pode relatar erros de duas maneiras. Se o primeiro caractere de optstring for dois pontos, o relatório de erro silencioso será usado. Em operação normal, as mensagens de diagnóstico são impressas quando opções inválidas ou argumentos de opção ausentes são encontrados. Se a variável OPTERR for definida como 0, nenhuma mensagem de erro será exibida, mesmo que o primeiro caractere de optstring não seja dois pontos.

Se uma opção inválida for vista, getopts coloca ? em nome e, se não for silencioso, imprime uma mensagem de erro e desativa OPTARG. Se getopts for silencioso, o caractere de opção encontrado será colocado em OPTARG e nenhuma mensagem de diagnóstico será impressa.

Se um argumento obrigatório não for encontrado e getopts não for silencioso, um ponto de interrogação ( ? ) será colocado em nome, OPTARG é desativado e uma mensagem de diagnóstico é impressa. Se getopts for silencioso, dois pontos ( : ) serão colocados em nome e OPTARG será definido como a opção personagem encontrado.

getopts retorna verdadeiro se uma opção, especificada ou não especificada, for encontrada. Ele retorna falso se o fim das opções for encontrado ou se ocorrer um erro.

hash [-lr] [-p filename] [-dt] [name]

Cada vez que hash é invocado, o caminho completo do comando name é determinado pesquisando os diretórios em ` PATH e lembrado. Qualquer nome de caminho previamente lembrado é descartado. Se a opção -p for fornecida, nenhuma pesquisa de caminho será executada e filename será usado como o nome de arquivo completo do comando. A opção -r faz com que o shell esqueça todos os locais lembrados. A opção -d faz com que o shell esqueça a localização lembrada de cada nome. Se a opção -t for fornecida, o caminho completo ao qual cada nome corresponde será impresso. Se vários argumentos name forem fornecidos com -t, o name será impresso antes do caminho completo com hash. A opção -l faz com que a saída seja exibida em um formato que pode ser reutilizado como entrada. Se nenhum argumento for fornecido, ou se apenas -l for fornecido, as informações sobre os comandos lembrados serão impressas. O status de retorno é verdadeiro, a menos que um nome não seja encontrado ou uma opção inválida seja fornecida.

help [-dms] [pattern]

Exiba informações úteis sobre comandos integrados. Se padrão for especificado, ajuda fornecerá ajuda detalhada sobre todos os comandos correspondentes a padrão; caso contrário, a ajuda para todos os builtins e estruturas de controle do shell é impressa.

-d

Exibe uma breve descrição de cada padrão

-m

Exiba a descrição de cada padrão em um formato de página de manual

-s

Exibir apenas uma breve sinopse de uso para cada padrão

O status de retorno é 0, a menos que nenhum comando corresponda a padrão.

history [n]
history -c
history -d offset
history -d start-end
history -anrw [filename]
history -p arg [arg ...]
history -s arg [arg ...]

Sem opções, exiba a lista de histórico de comandos com números de linha. As linhas listadas com * foram modificadas. Um argumento de n lista apenas as últimas n linhas. Se a variável de shell HISTTIMEFORMAT for definida e não nula, ela será usada como uma string de formato para strftime(3) para exibir o registro de data e hora associado com cada entrada do histórico exibido. Nenhum espaço em branco intermediário é impresso entre o carimbo de hora formatado e a linha do histórico. Se filename for fornecido, ele será usado como o nome do arquivo de histórico; caso contrário, o valor de HISTFILE é usado. As opções, se fornecidas, têm os seguintes significados:

-c

Limpe a lista do histórico excluindo todas as entradas.

-d offset

Exclua a entrada do histórico na posição offset. Se offset for negativo, ele será interpretado como relativo a um maior do que a última posição do histórico, portanto, os índices negativos contam a partir do final do histórico e um índice de -1 refere-se ao comando history -d atual.

-d start-end

Exclua as entradas do histórico entre as posições start e end, inclusive. Valores positivos e negativos para start e end são interpretados conforme descrito acima.

-a

Acrescente as linhas de histórico ``novo'' ao arquivo de histórico. Estas são as linhas do histórico inseridas desde o início da sessão bash atual, mas ainda não anexadas ao arquivo do histórico.

-n

Leia as linhas do histórico ainda não lidas do arquivo de histórico na lista de histórico atual. Estas são linhas anexadas ao arquivo de histórico desde o início da sessão bash atual.

-r

Leia o conteúdo do arquivo de histórico e anexe-o à lista de histórico atual.

-w

Grave a lista de histórico atual no arquivo de histórico, sobrescrevendo o conteúdo do arquivo de histórico.

-p

Execute a substituição do histórico nos seguintes args e exiba o resultado na saída padrão. Não armazena os resultados na lista de histórico. Cada arg deve ser citado para desativar a expansão normal do histórico.

-s

Armazene os args na lista de histórico como uma única entrada. O último comando na lista de histórico é removido antes que os args sejam adicionados.

Se a variável HISTTIMEFORMAT for definida, as informações de registro de data e hora associadas a cada entrada do histórico serão gravadas no arquivo de histórico, marcadas com o caractere de comentário do histórico. Quando o arquivo de histórico é lido, as linhas que começam com o caractere de comentário do histórico seguidas imediatamente por um dígito são interpretadas como carimbos de data/hora para a entrada do histórico a seguir. O valor de retorno é 0, a menos que uma opção inválida seja encontrada, ocorra um erro durante a leitura ou gravação do arquivo de histórico, um deslocamento inválido seja fornecido como um argumento para -d ou o a expansão do histórico fornecida como um argumento para -p falha.

jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]

O primeiro formulário lista os trabalhos ativos. As opções têm os seguintes significados:

-l

Liste IDs de processos além das informações normais.

-n

Exibir informações apenas sobre tarefas que mudaram de status desde que o usuário foi notificado pela última vez sobre seu status.

-p

Liste apenas o ID do processo do líder do grupo de processos da tarefa.

-r

Exibir apenas trabalhos em execução.

-s

Exibir apenas trabalhos parados.

Se jobspec for fornecido, a saída será restrita a informações sobre esse trabalho. O status de retorno é 0, a menos que uma opção inválida seja encontrada ou um jobspec inválido seja fornecido.

Se a opção -x for fornecida, jobs substituirá qualquer jobspec encontrado em command ou args com o ID do grupo de processos correspondente e executa o comando passando args, retornando seu status de saída.

kill [-s sigspec | -n signum | -sigspec] [pid | jobspec] ...
kill -l|-L [sigspec | exit_status]

Envie o sinal nomeado por sigspec ou signum para os processos nomeados por pid ou jobspec. sigspec é um nome de sinal que não diferencia maiúsculas de minúsculas, como SIGKILL (com ou sem o prefixo SIG) ou um número de sinal; signum é um número de sinal. Se sigspec não estiver presente, será assumido SIGTERM. Um argumento de -l lista os nomes dos sinais. Se algum argumento for fornecido quando -l for fornecido, os nomes dos sinais correspondentes aos argumentos serão listados e o status de retorno será 0. O argumento exit_status to -l é um número que especifica um número de sinal ou o status de saída de um processo finalizado por um sinal. A opção -L é equivalente a -l. kill retorna verdadeiro se pelo menos um sinal foi enviado com sucesso ou falso se ocorrer um erro ou uma opção inválida é encontrada.

let arg [arg ...]

Cada arg é uma expressão aritmética a ser avaliada (consulte AVALIAÇÃO ARITMÉTICA acima). Se o último arg for avaliado como 0, let retornará 1; 0 é retornado caso contrário.

local [option] [name[=value] ... | - ]

Para cada argumento, uma variável local chamada nome é criada e atribuída a valor. A opção pode ser qualquer uma das opções aceitas por declarar. Quando local é usado dentro de uma função, faz com que a variável nome para ter um escopo visível restrito a essa função e seus filhos. Se nome for -, o conjunto de opções de shell será local para a função na qual local é invocado: opções de shell alteradas usando o set builtin dentro da função são restaurados para seus valores originais quando a função retorna. A restauração é efetuada como se uma série de comandos set fossem executados para restaurar os valores que estavam no lugar antes da função. Sem operandos, local grava uma lista de variáveis locais na saída padrão. É um erro usar local quando não estiver em uma função. O status de retorno é 0, a menos que local seja usado fora de uma função, um nome inválido seja fornecido ou nome seja uma variável somente leitura.

logout

Saia de um shell de login.

mapfile [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]

Lê as linhas da entrada padrão na variável de array indexada array, ou do descritor de arquivo fd se a opção -u for fornecida. A variável MAPFILE é a matriz padrão. As opções, se fornecidas, têm os seguintes significados:

-d

O primeiro caractere de delim é usado para terminar cada linha de entrada, em vez de nova linha. Se delim for uma string vazia, mapfile terminará uma linha quando ler um caractere NUL.

-n

Copie no máximo count linhas. Se count for 0, todas as linhas serão copiadas.

-O

Comece atribuindo ao array no índice origem. O índice padrão é 0.

-s

Descarte a primeira contagem de linhas lidas.

-t

Remova um delim à direita (nova linha padrão) de cada linha lida.

-u

Leia as linhas do descritor de arquivo fd em vez da entrada padrão.

-C

Avalie o retorno de chamada sempre que as linhas quantum forem lidas. A opção -c especifica quantum.

-c

Especifique o número de linhas lidas entre cada chamada para callback.

Se -C for especificado sem -c, o quantum padrão é 5000. Quando callback é avaliado, é fornecido o índice de o próximo elemento da matriz a ser atribuído e a linha a ser atribuída a esse elemento como argumentos adicionais. callback é avaliado depois que a linha é lida, mas antes que o elemento da matriz seja atribuído.

Se não for fornecido com uma origem explícita, mapfile limpará array antes de atribuir a ele.

mapfile retorna com sucesso, a menos que uma opção ou argumento de opção inválido seja fornecido, array é inválido ou não pode ser atribuído, ou se array não é uma matriz indexada.

popd [-n] [+n] [-n]

Remove as entradas da pilha de diretórios. Sem argumentos, remove o diretório superior da pilha e executa um cd para o novo diretório superior. Os argumentos, se fornecidos, têm os seguintes significados:

-n

Suprime a mudança normal de diretório ao remover diretórios da pilha, para que apenas a pilha seja manipulada.

+n

Remove a contagem da nentrada à esquerda da lista mostrada por dirs, começando com zero. Por exemplo: ``popd +0'' remove o primeiro diretório, ``popd +1'' o segundo.

-n

Remove a contagem da nentrada à direita da lista mostrada por dirs, começando com zero. Por exemplo: ``popd -0'' remove o último diretório, ``popd -1'' o penúltimo.

Se o comando popd for bem-sucedido, um dirs também será executado e o status de retorno será 0. popd retornará falso se uma opção inválida for encontrado, a pilha de diretórios está vazia, uma entrada de pilha de diretórios inexistente é especificada ou a mudança de diretório falha.

printf [-v var] format [arguments]

Grave os argumentos formatados na saída padrão sob o controle do formato. A opção -v faz com que a saída seja atribuída à variável var em vez de ser impressa na saída padrão.

O formato é uma cadeia de caracteres que contém três tipos de objetos: caracteres simples, que são simplesmente copiados para a saída padrão, sequências de escape de caracteres, que são convertidas e copiadas para o padrão saída e especificações de formato, cada uma das quais causa a impressão do próximo argumento sucessivo. Além do padrão printf(1) especificações de formato, printf interpreta as seguintes extensões:

%b

faz com que printf expanda as sequências de escape de barra invertida no argumento correspondente da mesma forma que echo -e.

%q

faz com que printf gere o argumento correspondente em um formato que pode ser reutilizado como entrada de shell.

%(datefmt)T

faz com que printf gere a string de data e hora resultante do uso de datefmt como uma string de formato para strftime (3). O argumento correspondente é um número inteiro que representa o número de segundos desde a época. Dois valores de argumentos especiais podem ser usados: -1 representa a hora atual e -2 representa a hora em que o shell foi invocado. Se nenhum argumento for especificado, a conversão se comportará como se -1 tivesse sido fornecido. Esta é uma exceção ao comportamento printf normal.

As diretivas %b, %q e %T usam a largura do campo e os argumentos de precisão da especificação de formato e gravam tantos bytes do (ou usam um campo tão largo para) o argumento expandido, que geralmente contém mais caracteres do que o original .

Os argumentos para especificadores de formato não string são tratados como constantes C, exceto que um sinal de mais ou menos à esquerda é permitido e, se o caractere à esquerda for uma aspa simples ou dupla, o valor será o valor ASCII do caractere seguinte.

O formato é reutilizado conforme necessário para consumir todos os argumentos. Se o formato requer mais argumentos do que os fornecidos, as especificações de formato extra se comportam como se um valor zero ou string nula, conforme apropriado, tivesse sido fornecido. O valor de retorno é zero em caso de sucesso, diferente de zero em caso de falha.

pushd [-n] [+n] [-n]
pushd [-n] [dir]

Adiciona um diretório ao topo da pilha de diretórios ou gira a pilha, tornando o novo topo da pilha o diretório de trabalho atual. Sem argumentos, pushd troca os dois primeiros diretórios e retorna 0, a menos que a pilha de diretórios esteja vazia. Os argumentos, se fornecidos, têm os seguintes significados:

-n

Suprime a mudança normal de diretório ao girar ou adicionar diretórios à pilha, de modo que apenas a pilha seja manipulada.

+n

Gira a pilha para que o nésimo diretório (contando a partir da esquerda da lista mostrada por dirs, começando com zero) esteja no topo .

-n

Gira a pilha para que o nésimo diretório (contando a partir da direita da lista mostrada por dirs, começando com zero) esteja no topo .

dir

Adiciona dir à pilha de diretórios no topo, tornando-o o novo diretório de trabalho atual como se tivesse sido fornecido como o argumento para o cd builtin.

Se o comando pushd for bem-sucedido, um dirs também será executado. Se a primeira forma for usada, pushd retornará 0, a menos que o cd para dir falhe. Com a segunda forma, pushd retorna 0, a menos que a pilha de diretórios esteja vazia, um elemento inexistente da pilha de diretórios seja especificado ou a mudança de diretório para o novo diretório atual especificado falhe.

pwd [-LP]

Imprima o caminho absoluto do diretório de trabalho atual. O nome do caminho impresso não contém links simbólicos se a opção -P for fornecida ou a opção -o physical para o comando interno set estiver ativada. Se a opção -L for usada, o nome do caminho impresso pode conter links simbólicos. O status de retorno é 0, a menos que ocorra um erro durante a leitura do nome do diretório atual ou uma opção inválida seja fornecida.

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

Uma linha é lida da entrada padrão ou do descritor de arquivo fd fornecido como um argumento para a opção -u, dividida em palavras conforme descrito acima em Word Divisão, e a primeira palavra é atribuída ao primeiro nome, a segunda palavra ao segundo nome e assim por diante. Se houver mais palavras do que nomes, as palavras restantes e seus delimitadores intermediários são atribuídos ao último nome. Se houver menos palavras lidas do fluxo de entrada do que nomes, os nomes restantes receberão valores vazios. Os caracteres em IFS são usados para dividir a linha em palavras usando as mesmas regras que o shell usa para expansão (descrito acima em Divisão de palavras). O caractere de barra invertida ( \) pode ser usado para remover qualquer significado especial para o próximo caractere lido e para a continuação da linha. As opções, se fornecidas, têm os seguintes significados:

-a aname

As palavras são atribuídas a índices sequenciais da variável de matriz aname, começando em 0. aname não é definido antes que quaisquer novos valores sejam atribuídos. Outros argumentos name são ignorados.

-d delim

O primeiro caractere de delim é usado para encerrar a linha de entrada, em vez de nova linha. Se delim for uma string vazia, read terminará uma linha quando ler um caractere NUL.

-e

Se a entrada padrão vier de um terminal, readline (consulte READLINE acima) é usado para obter a linha. Readline usa as configurações de edição atuais (ou padrão, se a edição de linha não estiver ativa anteriormente), mas usa a conclusão do nome de arquivo padrão do Readline.

-i text

Se readline estiver sendo usado para ler a linha, text será colocado no buffer de edição antes do início da edição.

-n nchars

read retorna depois de ler nchars caracteres em vez de esperar por uma linha completa de entrada, mas respeita um delimitador se for menor que nchars Os caracteres são lidos antes do delimitador.

-N nchars

read retorna depois de ler exatamente nchars caracteres em vez de esperar por uma linha completa de entrada, a menos que EOF seja encontrado ou ler expire. Os caracteres delimitadores encontrados na entrada não são tratados de forma especial e não fazem com que read retorne até que os caracteres nchars sejam lidos. O resultado não é dividido nos caracteres em IFS; a intenção é que a variável seja atribuída exatamente aos caracteres lidos (com exceção da barra invertida; consulte a opção -r abaixo).

-p prompt

Exibir prompt no erro padrão, sem uma nova linha à direita, antes de tentar ler qualquer entrada. O prompt é exibido apenas se a entrada vier de um terminal.

-r

A barra invertida não funciona como um caractere de escape. A barra invertida é considerada parte da linha. Em particular, um par de barra invertida-nova linha não pode ser usado como uma continuação de linha.

-s

Modo silencioso. Se a entrada vier de um terminal, os caracteres não serão repetidos.

-t timeout

Causa ler para expirar e retornar falha se uma linha completa de entrada (ou um número especificado de caracteres) não for lida dentro de tempo limite segundos. timeout pode ser um número decimal com uma parte fracionária seguindo o ponto decimal. Esta opção só é eficaz se read estiver lendo a entrada de um terminal, pipe ou outro arquivo especial; não tem efeito durante a leitura de arquivos regulares. Se ler expirar, read salva qualquer entrada parcial lida em a variável especificada nome. Se timeout é 0, read retorna imediatamente, sem tentar ler nenhum dado. O status de saída é 0 se a entrada estiver disponível no descritor de arquivo especificado, diferente de zero caso contrário. O status de saída é maior que 128 se o tempo limite for excedido.

-u fd

Leia a entrada do descritor de arquivo fd.

Se nenhum nome for fornecido, a linha lida, sem o delimitador final, mas não modificada, é atribuída à variável REPLY. O status de saída é zero, a menos que o fim do arquivo seja encontrado, read expira (neste caso, o status é maior que 128), um erro de atribuição de variável (como atribuição a uma variável somente leitura) ocorre ou um descritor de arquivo inválido é fornecido como argumento para -u.

readonly [-aAf] [-p] [name[=word] ...]

Os nomes fornecidos são marcados como somente leitura; os valores desses nomes não podem ser alterados por atribuição subsequente. Se a opção -f for fornecida, as funções correspondentes aos nomes serão marcadas assim. A opção -a restringe as variáveis a arrays indexados; a opção -A restringe as variáveis a matrizes associativas. Se ambas as opções forem fornecidas, -A terá precedência. Se nenhum argumento name for fornecido, ou se a opção -p for fornecida, uma lista de todos os nomes somente leitura será impressa. As outras opções podem ser usadas para restringir a saída a um subconjunto do conjunto de nomes somente leitura. A opção -p faz com que a saída seja exibida em um formato que pode ser reutilizado como entrada. Se um nome de variável for seguido por =palavra, o valor da variável será definido como palavra. O retorno status é 0, a menos que uma opção inválida seja encontrada, um dos nomes não seja um nome de variável de shell válido ou -f seja fornecido com um nome isso não é uma função.

return [n]

Faz com que uma função pare de executar e retorne o valor especificado por n ao seu chamador. Se n for omitido, o status de retorno é o do último comando executado no corpo da função. Se return for executado por um manipulador de trap, o último comando usado para determinar o status é o último comando executado antes do manipulador de trap. Se return for executado durante uma trap DEBUG, o último comando usado para determinar o status é o último comando executado pelo manipulador de trap antes de return ser invocado. Se return é usado fora de uma função, mas durante a execução de um script pelo comando . (fonte), faz com que o shell pare de executar esse script e retorne n ou o status de saída do último comando executado no script como o status de saída do script. Se n for fornecido, o valor de retorno será seus 8 bits menos significativos. O status de retorno é diferente de zero se return receber um argumento não numérico ou for usado fora de uma função e não durante a execução de um script por . ou fonte. Qualquer comando associado à armadilha RETURN é executado antes que a execução seja retomada após a função ou script.

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

Sem opções, o nome e o valor de cada variável shell são exibidos em um formato que pode ser reutilizado como entrada para definir ou redefinir as variáveis definidas atualmente. As variáveis somente leitura não podem ser redefinidas. No modo posix, apenas as variáveis do shell são listadas. A saída é classificada de acordo com a localidade atual. Quando as opções são especificadas, elas definem ou desativam os atributos do shell. Quaisquer argumentos restantes após o processamento da opção são tratados como valores para os parâmetros posicionais e são atribuídos, em ordem, a $1, $2, ... $n. As opções, se especificadas, têm os seguintes significados:

-a

Cada variável ou função que é criada ou modificada recebe o atributo de exportação e é marcada para exportação para o ambiente de comandos subseqüentes.

-b

Relate o status dos trabalhos em segundo plano encerrados imediatamente, em vez de antes do próximo prompt principal. Isso só é eficaz quando o controle de trabalho está ativado.

-e

Saia imediatamente se for um pipeline (que pode consistir em um único comando simples), uma lista, ou um comando composto (consulte SHELL GRAMMAR acima), sai com um status diferente de zero. O shell não sai se o comando que falhou fizer parte da lista de comandos imediatamente após uma palavra-chave while ou until, parte do teste após o if palavras reservadas ou elif, parte de qualquer comando executado em uma lista && ou ||, exceto o comando após o && final ou ||, qualquer comando em um pipeline, exceto o último, ou se o valor de retorno do comando estiver sendo invertido com !. Se um comando composto diferente de um subshell retornar um status diferente de zero porque um comando falhou enquanto -e estava sendo ignorado, o shell não sai. Uma armadilha em ERR, se definido, é executado antes da saída do shell. Esta opção se aplica ao ambiente shell e a cada ambiente subshell separadamente (consulte

AMBIENTE DE EXECUÇÃO DE COMANDO acima) e pode fazer com que os subshells saiam antes de executar todos os comandos no subshell.

Se um comando composto ou função shell for executado em um contexto onde -e está sendo ignorado, nenhum dos comandos executados dentro do comando composto ou corpo da função será afetado pela configuração -e, mesmo se -e for definido e um comando retornar um status de falha. Se um comando composto ou função shell definir -e durante a execução em um contexto onde -e é ignorado, essa configuração não terá nenhum efeito até que o comando composto ou o comando que contém a chamada de função é concluída.

-f

Desative a expansão do nome do caminho.

-h

Lembre-se da localização dos comandos à medida que são procurados para execução. Isso é ativado por padrão.

-k

Todos os argumentos na forma de instruções de atribuição são colocados no ambiente para um comando, não apenas aqueles que precedem o nome do comando.

-m

Modo monitor. O controle do trabalho está ativado. Esta opção está ativada por padrão para shells interativos em sistemas que a suportam (consulte JOB CONTROL acima). Todos os processos são executados em um grupo de processos separado. Quando um trabalho em segundo plano é concluído, o shell imprime uma linha contendo seu status de saída.

-n

Lê comandos, mas não os executa. Isso pode ser usado para verificar um script de shell quanto a erros de sintaxe. Isso é ignorado por shells interativos.

-o option-name

O option-name pode ser um dos seguintes:

allexport

O mesmo que -a.

braceexpand

O mesmo que -B.

emacs

Use uma interface de edição de linha de comando estilo emacs. Isso é ativado por padrão quando o shell é interativo, a menos que o shell seja iniciado com a opção --noediting. Isso também afeta a interface de edição usada para read -e.

errexit

O mesmo que -e.

errtrace

O mesmo que -E.

functrace

O mesmo que -T.

hashall

O mesmo que -h.

histexpand

O mesmo que -H.

history

Habilite o histórico de comandos, conforme descrito acima em HISTÓRICO. Essa opção está ativada por padrão em shells interativos.

ignoreeof

O efeito é como se o comando shell ``IGNOREEOF=10'' tivesse sido executado (veja Variáveis do Shell acima).

keyword

O mesmo que -k.

monitor

O mesmo que -m.

noclobber

O mesmo que -C.

noexec

O mesmo que -n.

noglob

O mesmo que -f.

nolog

Atualmente ignorado.

notify

O mesmo que -b.

nounset

O mesmo que -u.

onecmd

O mesmo que -t.

physical

O mesmo que -P.

pipefail

Se definido, o valor de retorno de um pipeline é o valor do último comando (mais à direita) para sair com um status diferente de zero ou zero se todos os comandos no pipeline forem encerrados com êxito. Esta opção está desativada por padrão.

posix

Altere o comportamento de bash onde a operação padrão difere do padrão POSIX para corresponder ao padrão (modo posix). Consulte VEJA TAMBÉM abaixo para obter uma referência a um documento que detalha como o modo posix afeta o comportamento do bash.

privileged

O mesmo que -p.

verbose

O mesmo que -v.

vi

Use uma interface de edição de linha de comando estilo vi. Isso também afeta a interface de edição usada para read -e.

xtrace

O mesmo que -x.

Se -o for fornecido sem option-name, os valores das opções atuais serão impressos. Se +o for fornecido sem option-name, uma série de comandos set para recriar as configurações de opção atuais é exibido na saída padrão.

-p

Ative o modo privilegiado. Neste modo, os arquivos $ENV e $BASH_ENV não são processados, as funções shell não são herdadas do ambiente e os SHELLOPTS, < as variáveisBASHOPTS, CDPATH e GLOBIGNORE, caso apareçam no ambiente, são ignoradas. Se o shell for iniciado com o id do usuário efetivo (grupo) diferente do id do usuário real (grupo) e a opção -p não for fornecida, essas ações serão executadas e o id do usuário efetivo será definido como o ID do usuário real. Se a opção -p for fornecida na inicialização, o ID de usuário efetivo não será redefinido. Desativar esta opção faz com que os IDs efetivos de usuário e grupo sejam definidos como os IDs reais de usuário e grupo.

-t

Saia depois de ler e executar um comando.

-u

Trate as variáveis e parâmetros não definidos que não sejam os parâmetros especiais "@" e "*" como um erro ao executar a expansão do parâmetro. Se a expansão for tentada em uma variável ou parâmetro não definido, o shell imprimirá uma mensagem de erro e, se não for interativo, sairá com um status diferente de zero.

-v

Imprima as linhas de entrada do shell conforme elas são lidas.

-x

Depois de expandir cada comando simples, para command, case command, select command ou aritmética para command, exiba o valor expandido de< PS4, seguido pelo comando e seus argumentos expandidos ou lista de palavras associadas.

-B

O shell executa expansão de colchetes (consulte Expansão de colchetes acima). Isso é ativado por padrão.

-C

Se definido, bash não substitui um arquivo existente com os operadores de redirecionamento >, >& e <> . Isso pode ser substituído ao criar arquivos de saída usando o operador de redirecionamento >| em vez de >.

-E

Se definido, qualquer interceptação em ERR é herdada por funções de shell, substituições de comando e comandos executados em um ambiente de subshell. A trap ERR normalmente não é herdada nesses casos.

-H

Habilite a substituição do histórico de estilo !. Esta opção está ativada por padrão quando o shell é interativo.

-P

Se definido, o shell não resolve links simbólicos ao executar comandos como cd que alteram o diretório de trabalho atual. Em vez disso, ele usa a estrutura de diretório físico. Por padrão, bash segue a cadeia lógica de diretórios ao executar comandos que alteram o diretório atual.

-T

Se definido, quaisquer traps em DEBUG e RETURN são herdados por funções de shell, substituições de comandos e comandos executados em um ambiente de subshell. As armadilhas DEBUG e RETURN normalmente não são herdadas nesses casos.

--

Se nenhum argumento seguir essa opção, os parâmetros posicionais não serão definidos. Caso contrário, os parâmetros posicionais são definidos como args, mesmo que alguns deles comecem com um -.

-

Sinalize o fim das opções, faça com que todos os args restantes sejam atribuídos aos parâmetros posicionais. As opções -x e -v estão desativadas. Se não houver args, os parâmetros posicionais permanecem inalterados.

As opções estão desativadas por padrão, a menos que indicado de outra forma. Usar + em vez de - faz com que essas opções sejam desativadas. As opções também podem ser especificadas como argumentos para uma chamada do shell. O conjunto atual de opções pode ser encontrado em $-. O status de retorno é sempre verdadeiro, a menos que uma opção inválida seja encontrada.

shift [n]

Os parâmetros posicionais de n+1 ... são renomeados para $1 .... Parâmetros representados pelo números $# até $#-n+1 não estão definidos. n deve ser um número não negativo menor ou igual a $#. Se n for 0, nenhum parâmetro será alterado. Se n não for fornecido, será considerado 1. Se n for maior que $#, os parâmetros posicionais não serão alterados. O o status de retorno é maior que zero se n for maior que $# ou menor que zero; caso contrário 0.

shopt [-pqsu] [-o] [optname ...]

Alterna os valores das configurações que controlam o comportamento opcional do shell. As configurações podem ser as listadas abaixo ou, se a opção -o for usada, as disponíveis com a opção -o para o comando set builtin.< Sem opções, ou com a opção -p, uma lista de todas as opções configuráveis é exibida, com uma indicação se cada uma está ou não configurada; se optnames forem fornecidos, a saída será restrita a essas opções. A opção -p faz com que a saída seja exibida em um formato que pode ser reutilizado como entrada. Outras opções têm os seguintes significados:

-s

Habilite (defina) cada optname.

-u

Desativar (desativar) cada optname.

-q

Suprime a saída normal (modo silencioso); o status de retorno indica se o optname está definido ou não. Se vários argumentos optname forem fornecidos com -q, o status de retorno é zero se todos os optnames estiverem habilitados; diferente de zero caso contrário.

-o

Restringe os valores de optname para serem aqueles definidos para a opção -o para o set integrado.

Se -s ou -u for usado sem argumentos optname, shopt mostra apenas as opções que estão ativadas ou desativadas, respectivamente. Salvo indicação em contrário, as opções shopt são desativadas (não definidas) por padrão.

O status de retorno ao listar opções é zero se todos os optnames estiverem ativados, diferente de zero caso contrário. Ao definir ou desdefinir opções, o status de retorno é zero, a menos que um optname não seja uma opção shell válida.

A lista de opções de compra é:

assoc_expand_once

Se definido, o shell suprime a avaliação múltipla de subscritos de matriz associativa durante a avaliação da expressão aritmética, durante a execução de builtins que podem realizar atribuições de variáveis e durante a execução de builtins que realizam desreferência de array.

autocd

Se definido, um nome de comando que é o nome de um diretório é executado como se fosse o argumento para o comando cd. Esta opção é usada apenas por shells interativos.

cdable_vars

Se definido, um argumento para o comando interno cd que não é um diretório é considerado o nome de uma variável cujo valor é o diretório para o qual mudar.

cdspell

Se definido, pequenos erros na ortografia de um componente de diretório em um comando cd serão corrigidos. Os erros verificados são caracteres transpostos, um caractere ausente e um caractere a mais. Se uma correção for encontrada, o nome do arquivo corrigido é impresso e o comando continua. Esta opção é usada apenas por shells interativos.

checkhash

Se definido, bash verifica se existe um comando encontrado na tabela hash antes de tentar executá-lo. Se um comando hash não existir mais, uma pesquisa de caminho normal será executada.

checkjobs

Se definido, bash lista o status de qualquer trabalho interrompido e em execução antes de sair de um shell interativo. Se algum trabalho estiver em execução, isso fará com que a saída seja adiada até que uma segunda saída seja tentada sem um comando interveniente (consulte JOB CONTROL acima). O shell sempre adia a saída se algum trabalho for interrompido.

checkwinsize

Se definido, bash verifica o tamanho da janela após cada comando externo (não incorporado) e, se necessário, atualiza os valores de LINES e COLUMNS . Essa opção é ativada por padrão.

cmdhist

Se definido, bash tenta salvar todas as linhas de um comando de várias linhas na mesma entrada do histórico. Isso permite fácil reedição de comandos multilinha. Esta opção é ativada por padrão, mas só tem efeito se o histórico de comandos estiver ativado, conforme descrito acima em HISTÓRICO.

compat31
compat32
compat40
compat41
compat42
compat43
compat44

Esses aspectos controlam o modo de compatibilidade do shell (consulte MODO DE COMPATIBILIDADE DO SHELL abaixo).

complete_fullquote

Se definido, bash cita todos os metacaracteres shell em nomes de arquivos e nomes de diretórios ao executar a conclusão. Se não definido, bash remove metacaracteres como o cifrão do conjunto de caracteres que serão citados em nomes de arquivos completos quando esses metacaracteres aparecerem em referências de variáveis shell em palavras a serem completadas. Isso significa que cifrões em nomes de variáveis que se expandem para diretórios não serão citados; no entanto, quaisquer cifrões que apareçam em nomes de arquivos também não serão citados. Isso está ativo apenas quando o bash está usando barras invertidas para citar nomes de arquivos completos. Essa variável é definida por padrão, que é o comportamento bash padrão nas versões até 4.2.

direxpand

Se definido, bash substitui os nomes dos diretórios pelos resultados da expansão de palavras ao realizar a conclusão do nome do arquivo. Isso altera o conteúdo do buffer de edição da linha de leitura. Se não definido, bash tenta preservar o que o usuário digitou.

dirspell

Se definido, bash tenta corrigir a ortografia nos nomes de diretório durante a conclusão da palavra se o nome do diretório fornecido inicialmente não existir.

dotglob

Se definido, bash inclui nomes de arquivos começando com `.' nos resultados da expansão do nome do caminho. Os nomes de arquivo ``.'' e ``..'' sempre devem ser correspondidos explicitamente, mesmo se dotglob estiver definido.

execfail

Se definido, um shell não interativo não sairá se não puder executar o arquivo especificado como um argumento para o comando interno exec. Um shell interativo não sai se exec falhar.

expand_aliases

Se definido, os aliases são expandidos conforme descrito acima em ALIASES. Essa opção é habilitada por padrão para shells interativos.

extdebug

Se definido na chamada do shell ou em um arquivo de inicialização do shell, organize a execução do perfil do depurador antes do início do shell, idêntico à opção --debugger. Se definido após a chamada, o comportamento deve ser usado pelos depuradores está ativado:

1.

A opção -F para declarar o builtin exibe o nome do arquivo de origem e o número da linha correspondente a cada nome de função fornecido como um argumento.

2.

Se o comando executado pela armadilha DEBUG retornar um valor diferente de zero, o próximo comando será ignorado e não executado.

3.

Se o comando executado pela armadilha DEBUG retornar um valor de 2 e o shell estiver sendo executado em uma sub-rotina (uma função de shell ou um script de shell executado pelos . ou builtins de origem), o shell simula uma chamada para return.

4.

BASH_ARGC e BASH_ARGV são atualizados conforme descrito em suas descrições acima.

5.

O rastreamento de função está ativado: substituição de comando, funções de shell e subshells invocados com ( comando ) herdam as armadilhas DEBUG e RETURN.

6.

O rastreamento de erros está ativado: substituição de comando, funções de shell e subshells invocados com ( comando ) herdam a trap ERR.

extglob

Se definido, os recursos de correspondência de padrão estendido descritos acima em Expansão de nome de caminho são ativados.

extquote

Se definido, as aspas $'string' e $"string" são executadas dentro de $ {expansões de parâmetro} entre aspas duplas. Essa opção é ativada por padrão.

failglob

Se definido, os padrões que falham em corresponder aos nomes de arquivo durante a expansão do nome do caminho resultam em um erro de expansão.

force_fignore

Se definido, os sufixos especificados pela variável de shell FIGNORE fazem com que as palavras sejam ignoradas ao executar a conclusão de palavras, mesmo que as palavras ignoradas sejam as únicas possíveis conclusões. Veja VARIÁVEIS SHELL acima para uma descrição de FIGNORE. Essa opção é ativada por padrão.

globasciiranges

Se definido, expressões de intervalo usadas em expressões de colchetes de correspondência de padrão (consulte Correspondência de padrão acima) se comportam como se estivessem na localidade C tradicional ao realizar comparações. Ou seja, a sequência de agrupamento da localidade atual não é levada em consideração, então b não irá agrupar entre A e B, e letras maiúsculas e caracteres ASCII minúsculos serão agrupados.

globstar

Se definido, o padrão ** usado em um contexto de expansão de nome de caminho corresponderá a todos os arquivos e zero ou mais diretórios e subdiretórios. Se o padrão for seguido por um /, apenas os diretórios e os subdiretórios serão correspondentes.

gnu_errfmt

Se definido, as mensagens de erro do shell são gravadas no formato de mensagem de erro GNU padrão.

histappend

Se definido, a lista de histórico é anexada ao arquivo nomeado pelo valor da variável HISTFILE quando o shell sai, em vez de sobrescrever o arquivo.

histreedit

Se definido e readline estiver sendo usado, um usuário terá a oportunidade de reeditar uma substituição de histórico com falha.

histverify

Se definido e readline estiver sendo usado, os resultados da substituição do histórico não serão passados imediatamente para o analisador de shell. Em vez disso, a linha resultante é carregada no buffer de edição readline, permitindo modificações adicionais.

hostcomplete

Se definido e readline estiver sendo usado, o bash tentará concluir o nome do host quando uma palavra contendo um @ estiver sendo concluída (consulte Preenchimento em READLINE acima). Isso é ativado por padrão.

huponexit

Se definido, bash enviará SIGHUP para todos os trabalhos quando um shell de login interativo for encerrado.

inherit_errexit

Se definido, a substituição do comando herda o valor da opção errexit, em vez de desconfigurá-la no ambiente do subshell. Esta opção é ativada quando o modo posix está ativado.

interactive_comments

Se definido, permite que uma palavra começando com # faça com que essa palavra e todos os caracteres restantes nessa linha sejam ignorados em um shell interativo (consulte COMENTÁRIOS acima). Essa opção é ativada por padrão.

lastpipe

Se definido e o controle de trabalho não estiver ativo, o shell executará o último comando de um pipeline não executado em segundo plano no ambiente de shell atual.

lithist

Se definido e a opção cmdhist estiver ativada, os comandos de várias linhas serão salvos no histórico com novas linhas incorporadas em vez de usar separadores de ponto e vírgula sempre que possível.

localvar_inherit

Se definido, as variáveis locais herdam o valor e os atributos de uma variável com o mesmo nome que existe em um escopo anterior antes que qualquer novo valor seja atribuído. O atributo nameref não é herdado.

localvar_unset

Se definido, chamar desconfigurado em variáveis locais em escopos de função anteriores marca-os para que as pesquisas subsequentes os encontrem desdefinidos até que a função retorne. Isso é idêntico ao comportamento de desarmar variáveis locais no escopo da função atual.

login_shell

O shell define esta opção se for iniciado como um shell de login (consulte INVOCATION acima). O valor não pode ser alterado.

mailwarn

Se definido, e um arquivo que bash está verificando se há e-mail foi acessado desde a última vez em que foi verificado, a mensagem ``O e-mail no arquivo de e-mail foi ler'' é exibido.

no_empty_cmd_completion

Se definido e readline estiver sendo usado, bash não tentará pesquisar o PATH para possíveis conclusões quando a conclusão for tentada em uma linha vazia.

nocaseglob

Se definido, bash corresponde aos nomes de arquivo sem diferenciar maiúsculas de minúsculas ao executar a expansão do nome do caminho (consulte Expansão do nome do caminho acima).

nocasematch

Se definido, bash faz a correspondência de padrões sem diferenciar maiúsculas de minúsculas ao realizar a correspondência ao executar case ou [[comandos condicionais, ao realizar expansões de palavra de substituição de padrão ou ao filtrar possíveis conclusões como parte da conclusão programável.

nullglob

Se definido, bash permite que padrões que não correspondam a nenhum arquivo (consulte Expansão de nome de caminho acima) sejam expandidos para uma string nula, em vez de eles mesmos.

progcomp

Se definido, os recursos de conclusão programável (consulte Conclusão programável acima) são ativados. Esta opção é ativada por padrão.

progcomp_alias

Se definido e a conclusão programável estiver ativada, o bash trata um nome de comando que não possui nenhuma conclusão como um possível alias e tenta a expansão do alias. Se tiver um alias, o bash tenta a conclusão programável usando a palavra de comando resultante do alias expandido.

promptvars

Se definido, as strings de prompt passam por expansão de parâmetro, substituição de comando, expansão aritmética e remoção de aspas após serem expandidas conforme descrito em PROMPTING acima. Essa opção é ativada por padrão.

restricted_shell

O shell define esta opção se for iniciado no modo restrito (consulte SHELL RESTRITO abaixo). O valor não pode ser alterado. Isso não é redefinido quando os arquivos de inicialização são executados, permitindo que os arquivos de inicialização descubram se um shell é restrito ou não.

shift_verbose

Se definido, o shift integrado imprime uma mensagem de erro quando a contagem de deslocamento excede o número de parâmetros posicionais.

sourcepath

Se definido, o builtin source (.) usa o valor de PATH para encontrar o diretório que contém o arquivo fornecido como um argumento. Essa opção é ativada por padrão.

xpg_echo

Se definido, o echo interno expande as sequências de escape de barra invertida por padrão.

suspend [-f]

Suspenda a execução deste shell até receber um sinal SIGCONT. Um shell de login não pode ser suspenso; a opção -f pode ser usada para substituir isso e forçar a suspensão. O status de retorno é 0, a menos que o shell seja um shell de login e -f não seja fornecido ou se o controle de trabalho não estiver ativado.

test expr
[ expr ]

Retorna um status de 0 (verdadeiro) ou 1 (falso) dependendo da avaliação da expressão condicional expr. Cada operador e operando deve ser um argumento separado.

EXPRESSÕES CONDICIONAIS. teste não aceita nenhuma opção, nem aceita e ignora um argumento de -- como significando o fim das opções.

As expressões podem ser combinadas usando os seguintes operadores, listados em ordem decrescente de precedência. A avaliação depende do número de argumentos; Veja abaixo. A precedência do operador é usada quando há cinco ou mais argumentos.

! expr

Verdadeiro se expr for falso.

( expr )

Retorna o valor de expr. Isso pode ser usado para substituir a precedência normal dos operadores.

expr1 -a expr2

Verdadeiro se expr1 e expr2 forem verdadeiros.

expr1 -o expr2

Verdadeiro se expr1 ou expr2 for verdadeiro.

testar e [ avaliar expressões condicionais usando um conjunto de regras com base no número de argumentos.

0 arguments

A expressão é falsa.

1 argument

A expressão é verdadeira se e somente se o argumento não for nulo.

2 arguments

Se o primeiro argumento for !, a expressão será verdadeira se e somente se o segundo argumento for nulo. Se o primeiro argumento for um dos operadores condicionais unários listados acima em EXPRESSÕES CONDICIONAIS, a expressão será verdadeira se o teste unário for verdadeiro. Se o primeiro argumento não for um operador condicional unário válido, a expressão será falsa.

3 arguments

As seguintes condições são aplicadas na ordem listada. Se o segundo argumento for um dos operadores condicionais binários listados acima em EXPRESSÕES CONDICIONAIS, o resultado da expressão será o resultado do teste binário usando o primeiro e o terceiro argumentos como operandos. Os operadores -a e -o são considerados operadores binários quando há três argumentos. Se o primeiro argumento for !, o valor é a negação do teste de dois argumentos usando o segundo e o terceiro argumentos. Se o primeiro argumento for exatamente ( e o terceiro argumento for exatamente ), o resultado é o teste de um argumento do segundo argumento. Caso contrário, a expressão é falsa.

4 arguments

Se o primeiro argumento for !, o resultado é a negação de a expressão de três argumentos composta pelos argumentos restantes. Caso contrário, a expressão é analisada e avaliada de acordo com a precedência usando as regras listadas acima.

5 or more arguments

A expressão é analisada e avaliada de acordo com a precedência usando as regras listadas acima.

Quando usado com teste ou [, os operadores < e > classificam lexicograficamente usando a ordem ASCII.

times

Imprima os tempos acumulados do usuário e do sistema para o shell e para os processos executados a partir do shell. O status de retorno é 0.

trap [-lp] [[arg] sigspec ...]

O comando arg deve ser lido e executado quando o shell receber o(s) sinal(is) sigspec. Se arg estiver ausente (e houver um único sigspec) ou -, cada sinal especificado será redefinido para seu disposição original (o valor que tinha à entrada na concha). Se arg for a string nula, o sinal especificado por cada sigspec será ignorado pelo shell e pelos comandos que ele invoca. Se arg não estiver presente e -p tiver sido fornecido, os comandos trap associados a cada sigspec serão exibidos. Se nenhum argumento for fornecido ou se apenas -p for fornecido, trap imprime a lista de comandos associados a cada sinal. A opção -l faz com que o shell imprima uma lista de nomes de sinais e seus números correspondentes. Cada sigspec é um nome de sinal definido em <signal.h> ou um número de sinal. Os nomes dos sinais não diferenciam maiúsculas de minúsculas e o SIG é opcional.

Se um sigspec for EXIT (0), o comando arg será executado ao sair do shell. Se um sigspec for DEBUG, o comando arg é executado antes de cada comando simples, for comando, case comando, selecionar comando, cada aritmética para comando e antes que o primeiro comando seja executado em uma função shell (consulte GRAMÁTICA SHELL acima). Consulte a descrição da opção extdebug para o shopt integrado para obter detalhes de seu efeito na armadilha DEBUG. Se um sigspec for RETURN, o comando arg é executado cada vez que uma função shell ou um script é executado com o . ou builtins fonte termina de executar.

Se um sigspec for ERR, o comando arg será executado sempre que um pipeline (que pode consistir em um único comando simples), uma lista ou um comando composto retorna um status de saída diferente de zero, sujeito às seguintes condições. A armadilha ERR não é executada se o comando com falha fizer parte da lista de comandos imediatamente após uma palavra-chave while ou until, parte do teste em uma instrução if, parte de um comando executado em uma lista && ou ||, exceto o comando após o && ou || final. , qualquer comando em um pipeline, exceto o último, ou se o valor de retorno do comando estiver sendo invertido usando !. Estas são as mesmas condições obedecidas pela opção errexit (-e).

Os sinais ignorados após a entrada no shell não podem ser capturados ou redefinidos. Os sinais capturados que não estão sendo ignorados são redefinidos para seus valores originais em um subshell ou ambiente de subshell quando um é criado. O status de retorno é falso se qualquer sigspec for inválido; caso contrário trap retorna true.

type [-aftpP] name [name ...]

Sem opções, indique como cada nome seria interpretado se usado como um nome de comando. Se a opção -t for usada, tipo imprime uma string que é um dos alias, palavra-chave, função, integrado ou arquivo se nome for um alias, palavra reservada do shell, função, integrado ou arquivo de disco, respectivamente. Se o nome não for encontrado, nada será impresso e um status de saída falso será retornado. Se a opção -p for usada, type retorna o nome do arquivo de disco que seria executado se name fosse especificado como um nome de comando , ou nada se ``type -t name'' não retornar arquivo. A opção -P força uma pesquisa PATH para cada nome, mesmo se ``type -t name'' não retornaria arquivo. Se um comando tiver hash, -p e -P imprimem o valor hash, que não é necessariamente o arquivo que aparece primeiro em PATH. Se a opção -a for usada, type imprime todos os locais que contêm um executável chamado name. Isso inclui aliases e funções, se e somente se a opção -p também não for usada. A tabela de comandos hash não é consultada ao usar -a. A opção -f suprime a pesquisa de função shell, como com o comando interno. tipo retorna true se todos os argumentos forem encontrados, false se algum não são encontrados.

ulimit [-HS] -a
ulimit [-HS] [-bcdefiklmnpqrstuvxPRT [limit]]

Fornece controle sobre os recursos disponíveis para o shell e para os processos iniciados por ele, em sistemas que permitem esse controle. As opções -H e -S especificam que o limite rígido ou flexível é definido para o recurso fornecido. Um limite rígido não pode ser aumentado por um usuário não root depois de definido; um soft limit pode ser aumentado até o valor do hard limit. Se nem -H nem -S for especificado, os limites flexíveis e rígidos serão definidos. O valor de limit pode ser um número na unidade especificada para o recurso ou um dos valores especiais hard, soft ou ilimitado, que representam o hard limit atual, o soft limit atual e nenhum limite, respectivamente. Se limit for omitido, o valor atual do soft limit do recurso é impresso, a menos que a opção -H seja fornecida. Quando mais de um recurso é especificado, o nome do limite e a unidade, se apropriado, são impressos antes do valor. Outras opções são interpretadas da seguinte forma:

-a

Todos os limites atuais são relatados; nenhum limite é definido

-b

O tamanho máximo do buffer de soquete

-c

O tamanho máximo dos arquivos principais criados

-d

O tamanho máximo do segmento de dados de um processo

-e

A prioridade máxima de agendamento ("legal")

-f

O tamanho máximo dos arquivos gravados pelo shell e seus filhos

-i

O número máximo de sinais pendentes

-k

O número máximo de kqueues que podem ser alocados

-l

O tamanho máximo que pode ser bloqueado na memória

-m

O tamanho máximo do conjunto residente (muitos sistemas não respeitam esse limite)

-n

O número máximo de descritores de arquivos abertos (a maioria dos sistemas não permite que esse valor seja definido)

-p

O tamanho do pipe em blocos de 512 bytes (isso não pode ser definido)

-q

O número máximo de bytes em filas de mensagens POSIX

-r

A prioridade máxima de agendamento em tempo real

-s

O tamanho máximo da pilha

-t

A quantidade máxima de tempo de CPU em segundos

-u

O número máximo de processos disponíveis para um único usuário

-v

A quantidade máxima de memória virtual disponível para o shell e, em alguns sistemas, para seus filhos

-x

O número máximo de bloqueios de arquivo

-P

O número máximo de pseudoterminais

-R

O tempo máximo que um processo em tempo real pode executar antes do bloqueio, em microssegundos

-T

O número máximo de tópicos

Se limit for fornecido e a opção -a não for usada, limit será o novo valor do recurso especificado. Se nenhuma opção for dada, então -f é assumido. Os valores estão em incrementos de 1024 bytes, exceto para -t, que é em segundos; -R, que está em microssegundos; -p, que está em unidades de blocos de 512 bytes; -P, -T, -b, -k, -n, e -u, que são valores sem escala; e, quando no modo posix, -c e -f, que estão em incrementos de 512 bytes. O status de retorno é 0, a menos que uma opção ou argumento inválido seja fornecido ou ocorra um erro ao definir um novo limite.

umask [-p] [-S] [mode]

A máscara de criação de arquivo do usuário está definida para modo. Se o modo começar com um dígito, ele será interpretado como um número octal; caso contrário, é interpretado como uma máscara de modo simbólico semelhante ao aceito por chmod(1). Se modo for omitido, o valor atual da máscara será impresso. A opção -S faz com que a máscara seja impressa de forma simbólica; a saída padrão é um número octal. Se a opção -p for fornecida e modo for omitido, a saída estará em um formato que pode ser reutilizado como entrada. O status de retorno é 0 se o modo foi alterado com sucesso ou se nenhum argumento modo foi fornecido e falso caso contrário.

unalias [-a] [name ...]

Remova cada nome da lista de aliases definidos. Se for fornecido -a, todas as definições de alias serão removidas. O valor de retorno é verdadeiro, a menos que um nome fornecido não seja um alias definido.

unset [-fv] [-n] [name ...]

Para cada nome, remova a variável ou função correspondente. Se a opção -v for fornecida, cada nome se refere a uma variável shell e essa variável é removida. As variáveis somente leitura não podem ser desdefinidas. Se -f for especificado, cada nome se referirá a uma função shell e a definição da função será removida. Se a opção -n for fornecida e nome for uma variável com o atributo nameref, nome não será definido em vez da variável a que ele faz referência. -n não tem efeito se a opção -f for fornecida.

Se nenhuma opção for fornecida, cada nome refere-se a uma variável; se não houver variável com esse nome, uma função com esse nome, se houver, será desativada. Cada variável ou função não definida é removida do ambiente passada para comandos subseqüentes. Se qualquer um dos BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME , GRUPOS, HISTCMD, LINENO, RANDOM, SECONDS ou SRANDOM são desmarcados, eles perdem suas propriedades especiais, mesmo se forem redefinidos posteriormente.

O status de saída é verdadeiro, a menos que um nome seja somente leitura.

wait [-fn] [-p varname] [id ...]

Aguarde cada processo filho especificado e retorne seu status de encerramento. Cada id pode ser um ID de processo ou uma especificação de trabalho; se uma especificação de trabalho for fornecida, todos os processos no pipeline desse trabalho serão aguardados. Se id não for fornecido, wait aguarda todos os trabalhos em segundo plano em execução e a última substituição de processo executada, se o ID do processo for igual a $!,< e o status de retorno é zero. Se a opção -n for fornecida, wait espera por um único trabalho da lista de ids ou, se não ids são fornecidos, qualquer trabalho, para concluir e retorna seu status de saída. Se nenhum dos argumentos fornecidos for filho do shell, ou se nenhum argumento for fornecido e o shell não tiver filhos não esperados, o status de saída será 127. Se a opção -p for fornecida, o processo ou tarefa identificador do trabalho para o qual o status de saída é retornado é atribuído à variável varname nomeada pelo argumento de opção. A variável será desdefinida inicialmente, antes de qualquer atribuição. Isso é útil apenas quando a opção -n é fornecida. Fornecer a opção -f, quando o controle de trabalho está ativado, força aguardar id para encerrar antes de retornar seu status, em vez de retornar quando mudar de status. Se id especificar um processo ou trabalho inexistente, o status de retorno será 127. Caso contrário, o status de retorno será o status de saída do último processo ou trabalho esperado.

MODO DE COMPATIBILIDADE SHELL

O Bash-4.0 introduziu o conceito de 'nível de compatibilidade de shell', especificado como um conjunto de opções para o shopt builtin compat31, compat32, compat40 , compat41 e assim por diante). Existe apenas um nível de compatibilidade atual -- cada opção é mutuamente exclusiva. O nível de compatibilidade destina-se a permitir que os usuários selecionem o comportamento de versões anteriores que são incompatíveis com versões mais recentes enquanto migram scripts para usar recursos e comportamentos atuais. Destina-se a ser uma solução temporária.

Esta seção não menciona o comportamento que é padrão para uma versão específica (por exemplo, definir compat32 significa que colocar aspas rhs do operador regexp correspondente coloca caracteres regexp especiais na palavra, que é o comportamento padrão em bash- 3.2 e acima).

Se um usuário habilitar, digamos, compat32, isso pode afetar o comportamento de outros níveis de compatibilidade até e incluindo o nível de compatibilidade atual. A ideia é que cada nível de compatibilidade controle o comportamento que foi alterado naquela versão do bash, mas esse comportamento pode estar presente em versões anteriores. Por exemplo, a mudança para usar comparações baseadas em localidade com o comando [[ veio no bash-4.1, e versões anteriores usavam comparações baseadas em ASCII, então habilitar compat32 habilitará comparações baseadas em ASCII também. Essa granularidade pode não ser suficiente para todos os usos e, como resultado, os usuários devem empregar os níveis de compatibilidade com cuidado. Leia a documentação de um recurso específico para descobrir o comportamento atual.

O Bash-4.3 introduziu uma nova variável de shell:

BASH_COMPAT. O valor atribuído a esta variável (um número de versão decimal como 4.2 ou um número inteiro correspondente à opção compatNN, como 42) determina o nível de compatibilidade.

A partir do bash-4.4, o Bash começou a substituir os níveis de compatibilidade mais antigos. Eventualmente, as opções serão removidas em favor de BASH_COMPAT.

O Bash-5.0 é a versão final para a qual haverá uma opção de compra individual para a versão anterior. Os usuários devem usar BASH_COMPAT no bash-5.0 e versões posteriores.

A tabela a seguir descreve as alterações de comportamento controladas por cada configuração de nível de compatibilidade. A tag compatNN é usada como atalho para definir o nível de compatibilidade para NN usando um dos seguintes mecanismos. Para versões anteriores a bash-5.0, o nível de compatibilidade pode ser definido usando a opção compatNN correspondente. Para bash-4.3 e versões posteriores, a variável BASH_COMPAT é preferida e é necessária para bash-5.1 e versões posteriores.

compat31
  • citar os rhs do [[command's regexp matching operator (=~) não tem nenhum efeito especial

compat32
  • interromper uma lista de comandos como "a ; b ; c" causa a execução do próximo comando na lista (no bash-4.0 e versões posteriores, o shell age como se tivesse recebido a interrupção, então interromper um comando em uma lista aborta a execução de toda a lista)

compat40
  • os operadores < e > para o comando [[ não consideram a localidade atual ao comparar strings; eles usam ordenação ASCII. Versões Bash anteriores a bash-4.1 usam collation ASCII e strcmp(3); bash-4.1 e posteriores usam a sequência de collation da localidade atual e strcoll(3).

compat41
  • no modo posix, o tempo pode ser seguido por opções e ainda ser reconhecido como uma palavra reservada (esta é a interpretação POSIX 267)

  • no modo posix, o analisador requer que um número par de aspas simples ocorra na parte palavra de uma aspa dupla expansão de parâmetros e os trata de maneira especial, de modo que os caracteres entre aspas simples sejam considerados entre aspas (esta é a interpretação POSIX 221)

compat42
  • a string de substituição na substituição de padrão de aspas duplas não passa por remoção de aspas, como acontece nas versões posteriores a bash-4.2

  • no modo posix, as aspas simples são consideradas especiais ao expandir a parte palavra de uma expansão de parâmetro com aspas duplas e podem ser usadas para fechar uma chave ou outro caractere especial (este faz parte da interpretação POSIX 221); em versões posteriores, aspas simples não são especiais em expansões de palavras com aspas duplas

compat43
  • o shell não imprime uma mensagem de aviso se for feita uma tentativa de usar uma atribuição composta entre aspas como um argumento para declarar (declare -a foo='(1 2)'). Versões posteriores avisam que esse uso está obsoleto

  • erros de expansão de palavras são considerados erros não fatais que causam falha no comando atual, mesmo no modo posix (o comportamento padrão é torná-los erros fatais que causam a saída do shell)

  • ao executar uma função shell, o estado do loop (while/until/etc.) não é redefinido, então interromper ou continuar nessa função interromperá ou continuará os loops no contexto de chamada. Bash-4.4 e posterior redefinir o estado do loop para evitar isso

compat44
  • o shell configura os valores usados por BASH_ARGV e BASH_ARGC para que eles possam se expandir para os parâmetros posicionais do shell, mesmo se o modo de depuração estendida não estiver ativado

  • um subshell herda loops de seu contexto pai, então break ou continue fará com que o subshell saia. Bash-5.0 e posteriormente redefinirá o estado do loop para evitar a saída

  • atribuições de variáveis que precedem builtins como export e readonly que definem atributos continuam a afetar variáveis com o mesmo nome no ambiente de chamada, mesmo se o shell não estiver no modo posix

compat50
  • Bash-5.1 mudou a forma como $RANDOM é gerado para introduzir um pouco mais de aleatoriedade. Se o nível de compatibilidade do shell for definido como 50 ou inferior, ele será revertido para o método do bash-5.0 e das versões anteriores, portanto, semear o gerador de números aleatórios atribuindo um valor a < RANDOM produzirá a mesma sequência como em bash-5.0/p>

  • Se a tabela de hash do comando estiver vazia, as versões do bash anteriores ao bash-5.1 imprimiram uma mensagem informativa para esse efeito, mesmo ao produzir uma saída que pode ser reutilizada como entrada. O Bash-5.1 suprime essa mensagem quando a opção -l é fornecida.

CASCO RESTRITO

Se bash for iniciado com o nome rbash ou a opção -r for fornecida na chamada, o shell se tornará restrito. Um shell restrito é usado para configurar um ambiente mais controlado do que o shell padrão. Ele se comporta de forma idêntica ao bash, com a exceção de que o seguinte não é permitido ou não é executado:

  • alterando diretórios com cd

  • definir ou não definir os valores de SHELL, PATH, HISTFILE, ENV ou BASH_ENV

  • especificando nomes de comandos contendo /

  • especificando um nome de arquivo contendo um / como um argumento para o comando interno .

  • especificando um nome de arquivo contendo uma barra como um argumento para o comando interno history

  • especificando um nome de arquivo contendo uma barra como um argumento para a opção -p para o comando interno hash

  • importando definições de função do ambiente shell na inicialização

  • analisando o valor de SHELLOPTS do ambiente shell na inicialização

  • redirecionando a saída usando os operadores de redirecionamento >, >|, <>, >&, &> e >>

  • usando o comando interno exec para substituir o shell por outro comando

  • adicionando ou excluindo comandos internos com as opções -f e -d para o comando interno enable

  • usando o comando enable builtin para habilitar shell builtins desabilitados

  • especificando a opção -p para o comando interno comando

  • desativando o modo restrito com set +r ou set +o restrito.

Essas restrições são impostas após a leitura de qualquer arquivo de inicialização.

rbash desativa quaisquer restrições no shell gerado para executar o script.

VEJA TAMBÉM

Bash Reference Manual, Brian Fox and Chet Ramey
The Gnu Readline Library, Brian Fox and Chet Ramey
The Gnu History Library, Brian Fox and Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE --

http://pubs.opengroup.org/onlinepubs/9699919799/

http://tiswww.case.edu/~chet/bash/POSIX -- a description of posix mode
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

ARQUIVOS

 /bin/bash 

O executável bash

 /etc/profile 

O arquivo de inicialização de todo o sistema, executado para shells de login

 ~/.bash_profile 

O arquivo de inicialização pessoal, executado para shells de login

 ~/.bashrc 

O arquivo de inicialização individual por shell interativo

 ~/.bash_logout 

O arquivo de limpeza do shell de login individual, executado quando um shell de login sai

 ~/.inputrc 

Arquivo de inicialização readline individual

AUTORES

Brian Fox, Fundação de Software Livre
bfox@gnu.org

Chet Ramey, Case Western Reserve University
chet.ramey@case.edu

RELATÓRIO DE ERROS

Se você encontrar um bug no bash, você deve denunciá-lo. Mas primeiro, você deve se certificar de que realmente é um bug e que aparece na versão mais recente do bash. A versão mais recente está sempre disponível em ftp://ftp.gnu.org/pub/gnu/bash/.

Depois de determinar que um bug realmente existe, use o comando bashbug para enviar um relatório de bug. Se você tiver uma correção, você é encorajado a enviá-la também! Sugestões e relatórios de erros `filosóficos' podem ser enviados para bug-bash@gnu.org ou postados no grupo de notícias Usenet gnu.bash.bug .

TODOS os relatórios de bugs devem incluir:

The version number of bash
The hardware and operating system
The compiler used to compile
A description of the bug behaviour
A short script or `recipe' which exercises the bug

bashbug insere os três primeiros itens automaticamente no modelo que fornece para arquivar um relatório de bug.

Comentários e relatórios de erros referentes a esta página de manual devem ser direcionados para chet.ramey@case.edu.

INSETOS

É muito grande e muito lento.

Existem algumas diferenças sutis entre o bash e as versões tradicionais do sh, principalmente por causa da especificação POSIX.

Aliases são confusos em alguns usos.

Os comandos e funções internos do shell não podem ser interrompidos/reiniciados.

Comandos compostos e sequências de comandos na forma `a ; b ; c' não são tratados normalmente quando a suspensão do processo é tentada. Quando um processo é interrompido, o shell executa imediatamente o próximo comando na sequência. Basta colocar a sequência de comandos entre parênteses para forçá-la a um subshell, que pode ser interrompido como uma unidade.

Variáveis de matriz não podem (ainda) ser exportadas.

Pode haver apenas um coprocesso ativo por vez.