O que significa $?

28

Estou acompanhando um tutorial e ele menciona para executar este comando:

sudo chmod 700 !$

Não estou familiarizado com !$ . O que significa isso?

    
por Andrew 29.08.2013 / 07:16

3 respostas

40

Basicamente, é o último argumento para o comando anterior.

!$ is the "end" of the previous command. Consider the following example: We start by looking for a word in a file:

grep -i joe /some/long/directory/structure/user-lists/list-15

if joe is in that userlist, we want to remove him from it. We can either fire up vi with that long directory tree as the argument, or as simply as vi !$ Which bash expands to:

vi /some/long/directory/structure/user-lists/list-15

( fonte ; guia prático, pelo caminho)

Não vale a pena a distinção entre este token !$ e a variável especial $_ da shell. De fato, ambos expandem para o último argumento do comando anterior. No entanto, !$ é expandido durante expansão do histórico , enquanto $_ é expandido durante a expansão do parâmetro . Uma conseqüência importante disso é que, quando você usa !$ , o comando expandido é salvo em seu histórico.

Por exemplo, considere as combinações de teclas

  • echo Foo Entre echo !$ Jar Entre Acima Digite ; e

  • echo Foo Insira echo $_ Jar Entre Acima Digite .

(Os únicos caracteres alterados são $! e $_ no meio).

No primeiro, quando você pressiona Acima , a linha de comando lê echo Foo Jar , então a última linha gravada no stdout é Foo Jar .

No último, quando você pressiona Acima , a linha de comando lê echo $_ bar , mas agora $_ tem um valor diferente do que anteriormente - na verdade, $_ agora é Jar , então a última linha gravada no stdout é Jar Jar .

Outra conseqüência é que _ pode ser usado em outras expansões de parâmetros, por exemplo, a sequência de comandos

printf '%s '    isomorphism
printf '%s\n'   ${_%morphism}sceles

imprime isomorphism isosceles . Mas não há expansão " ${!$%morphism} " análoga.

Para obter mais informações sobre as fases de expansão no Bash, consulte a seção EXPANSION de man 1 bash (isso é chamado de Expansões da Shell na edição on-line). A seção HISTORY EXPANSION é separada.

    
por 29.08.2013 / 07:22
3

Estritamente falando, !$ é a última palavra do último comando da lista de histórico.

word - A sequence of characters treated as a unit by the shell. Words may not include unquoted metacharacters.

metacharacter - A character that, when unquoted, separates words. A metacharacter is a blank or one of the following characters: ‘|’, ‘&’, ‘;’, ‘(’, ‘)’, ‘<’, or ‘>’

blank - A space or tab character.

Exemplos:

set -o history # enable command history
set -o histexpand # enable ! style history substitution

HISTSIZE=10

# save all lines on the history list    
HISTCONTROL=
HISTIGNORE=

date
echo !$ # prints date

date>/dev/null
echo !$ # prints /dev/null

echo a b c>/dev/null
echo !$ # prints /dev/null

HISTCONTROL=ignorespace # lines which begin with a space character are not saved in the history list
echo a b c
 echo d e f # space at the beginning
echo !$ # prints c
    
por 10.07.2015 / 21:19
-2

!$ lhe dará o último comando usado para esse usuário em particular ....

você também pode encontrar o histórico de comandos usados anteriormente usando o comando history ... experimente ...

NOTA: Para um usuário em particular, todos os comandos usados anteriormente serão armazenados no arquivo bash do histórico.

    
por 11.08.2017 / 23:21