Sto seguendo un tutorial e menziona di eseguire questo comando:
sudo chmod 700 !$
Non ho familiarità con !$
. Che cosa significa?
Commenti
Risposta
Fondamentalmente, “è lultimo argomento del comando precedente.
!$
è la” fine “del comando precedente Considera il seguente esempio: Iniziamo cercando una parola in un file:grep -i joe /some/long/directory/structure/user-lists/list-15
se Joe è in quellelenco utenti, vogliamo rimuoverlo da esso Possiamo avviare vi con quel lungo albero di directory come argomento, o semplicemente come
vi !$
Quale bash si espande in:vi /some/long/directory/structure/user-lists/list-15
( sorgente ; a proposito, guida pratica)
Non vale nulla la distinzione tra questo !$
token e la variabile di shell speciale $_
. In effetti, entrambi si espandono allultimo argomento del comando precedente. Tuttavia, !$
viene espanso durante l espansione della cronologia , mentre $_
viene espanso durante l espansione dei parametri . Una conseguenza importante di ciò è che, quando utilizzi !$
, il comando Expand viene salvato nella tua cronologia.
Ad esempio, considera le sequenze di tasti
-
echo Foo
Invioecho !$ Jar
Invio Su Invio ; e -
echo Foo
Invioecho $_ Jar
Inserisci Su Invio.
(gli unici caratteri modificati sono $!
e $_
al centro.)
Nella prima, quando premi Su , la riga di comando legge echo Foo Jar
, quindi lultima riga scritta in stdout è Foo Jar
.
In questultima, quando premi Su , la riga di comando legge echo $_ bar
, ma ora $_
ha un valore diverso da quello precedente, anzi, $_
ora è Jar
, quindi lultima riga scritta in stdout è Jar Jar
.
Unaltra conseguenza è che _
può essere utilizzato in altre espansioni di parametri, ad esempio, la sequenza di comandi
printf "%s " isomorphism printf "%s\n" ${_%morphism}sceles
stampa isomorphism isosceles
. Ma non esiste unespansione ${!$%morphism}
“analoga.
Per ulteriori informazioni sulle fasi di espansione in Bash, vedere il EXPANSION
sezione di man 1 bash
(questo è chiamato Shell Expansions nelledizione online). Il HISTORY EXPANSION
La sezione è separata.
Commenti
- Bello. Buono a sapersi. Inoltre, buona cosa ' s Stack Exchange. ' è difficile cercare su Google qualcosa come
!$
- A proposito, sulla riga di comando, puoi inserire lultimo argomento del comando precedente da
insert-last-argument
, solitamente associato aM-.
. - @Andrew, ricordati di accettare questo messaggio se risponde alla tua domanda. Accettare e votare a favore anziché postare commenti è il modo in cui i ringraziamenti vengono espressi sulla rete SE, vedi qui per " ufficiale " posizione.
- @Andrew FYI, ho cercato su Google " bash bang dollar " e ho ottenuto risultati decenti, incluso questo link come terzo elenco.
- @terdon Ho provato ad accettare la risposta ieri sera, ma è stato così veloce che sono stato costretto ad aspettare per accettarlo.
Risposta
In senso stretto !$
è lultima parola dellultimo comando dallelenco della cronologia.
parola – Una sequenza di caratteri trattata come ununità dalla shell. Le parole non possono includere metacaratteri non quotati.
metacarattere: un carattere che, se non quotato, separa le parole. Un metacarattere è uno spazio vuoto o uno dei seguenti caratteri: |, &, ;, (, ), <” o “>”
vuoto: uno spazio o un carattere di tabulazione.
Esempi:
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
Commenti
Risposta
!$
ti darà lultimo comando utilizzato per quel particolare utente ….
puoi anche trovare la cronologia dei comandi usati in precedenza usando il comando history
… provalo ….
NOTA: per un particolare utente, tutti i comandi utilizzati in precedenza verranno memorizzati nel file di cronologia bash.
Commenti
- Le altre risposte sono corrette. Questo è sbagliato.
echo
qualcosa se ' non sei sicuro di cosa ' farai.echo $(rm -rf /)
--no-preserve-root
e se vedi le parole " non conservare " in un programma è meglio che pensi molto attentamente a ciò che fa.