No Bash, parece haver várias variáveis que possuem valores especiais com significado consistente. Por exemplo,
./myprogram &; echo $!
retornará o PID do processo em segundo plano myprogram
. Eu conheço outros, como o $?
que eu acho que é o atual TTY. Existem outros?
bash
environment-variables
dollar-sign
Z Douglas
fonte
fonte
$'\n'
é um caractere de nova linha literal que resultam de substituir o dígrafo\n
com ASCII 10.${1}
,${*}
, etc, as chaves são apenas para desambiguação, e muitas vezes redundantes. Isoladamente,${x}
é exatamente equivalente a$x
.$!
significa isso ? Estou ciente,!$
mas não disso.Respostas:
$1
,$2
,$3
, ... são os parâmetros posicionais ."$@"
é uma construção semelhante a uma matriz de todos os parâmetros posicionais{$1, $2, $3 ...}
,."$*"
é a expansão do IFS de todos os parâmetros posicionais$1 $2 $3 ...
,.$#
é o número de parâmetros posicionais.$-
opções atuais definidas para o shell.$$
pid do shell atual (não subshell).$_
parâmetro mais recente (ou o caminho abs do comando para iniciar o shell atual imediatamente após a inicialização).$IFS
é o separador de campo (entrada).$?
é o status de saída do pipeline em primeiro plano mais recente.$!
é o PID do comando em segundo plano mais recente.$0
é o nome do shell ou script do shell.A maioria dos itens acima pode ser encontrada em Parâmetros especiais no Manual de referência do Bash. Existem todas as variáveis de ambiente definidas pelo shell .
Para um índice abrangente, consulte o Índice Variável do Manual de Referência .
fonte
bash
página do manual. A única singularidade é que$_
é mencionada apenas no contexto de seu uso naMAILPATH
variável.man(1) bash
sob parâmetros especiais para o resto da definição de$_
.!$
vez de$_
nos scripts do bash, porque o último às vezes falha.!$
e$_
.$_
último argumento do último comando$#
número de argumentos transmitidos para o script atual$*
/$@
lista de argumentos transmitidos para o script como string / lista delimitadaEm cima da minha cabeça. Google para bash variáveis especiais.
fonte
$@
é a string e$*
é a lista delimitada (de qualquer forma, de acordo com a resposta aceita acima)."$@"
expande para uma lista,"$*"
expande para uma única string. O comportamento especial de$@
aplica-se quando está entre aspas duplas.Para ajudar a entender o que
$#
,$0
e$1
, ...,$n
não, eu uso este script:A execução retorna uma saída representativa:
fonte
Tome cuidado com alguns dos exemplos; $ 0 podem incluir alguns caminhos principais, bem como o nome do programa. Por exemplo, salve esse script de duas linhas como ./mytry.sh e execute-o.
Resultado:
Esta é uma versão atual (ano de 2016) do Bash, via Slackware 14.2
fonte