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-15se 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 FooInvioecho !$ JarInvio Su Invio ; e -
echo FooInvioecho $_ JarInserisci 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.
echoqualcosa se ' non sei sicuro di cosa ' farai.echo $(rm -rf /)--no-preserve-roote se vedi le parole " non conservare " in un programma è meglio che pensi molto attentamente a ciò che fa.