Vedere la sezione ESPANSIONE DELLA STORIA in man bash, in particolare la sottosezione Word Designators. !#:3
si riferisce alla terza parola della pipe, che è (nel tuo esempio) ~/bin/ack
. In ordine, le parole del comando sono curl
, 0; http://betterthangrep.com/ack-standalone
, 1; >
, 2; ~/bin/ack
, 3; &&
, 4; chmod
, 5; 0755
, 6; !#:3
, 7. Ovvero, !#:3
è un modo per ripetere il nome file senza utilizzare una variabile separata o un testo letterale.
Per quanto riguarda la domanda su >
e gli spazi bianchi, notare che >
è un metacarattere, che man bash definisce come un "carattere che, quando non quotato, separa le parole. Uno dei seguenti: | &;() <> scheda spazio ". Quindi gli spazi bianchi non influiscono sul fatto che >
conta come un token. Notare che nell'esempio seguente, il primo 3
viene citato in modo che bash non lo interpreti come parte di un reindirizzamento 3>
. Quando la riga è stata inserita, bash ha fatto eco alla linea espansa e poi l'ha eseguita.
$ seq '3'>bbb;cat !#:3 !#:2 ccc; head !#:3 !#:8
seq '3'>bbb;cat bbb > ccc; head bbb ccc
==> bbb <==
1
2
3
==> ccc <==
1
2
3
fonte
2012-10-14 19:03:12
Sono il manutentore di betterthangrep.com e non sapevo nemmeno cosa facesse, se non sapere che funzionava. Grazie per avermi chiesto cosa avrei dovuto chiedere quando qualcuno me l'ha presentato. :) –
Per favore non usare saluti come ["Grazie in anticipo!"] (Http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from posts). E non aggiungerli ai post di altre persone. – NullUserException