Domanda

Qual è il significato per $! conchiglia shell scripting? Sto cercando di capire uno script che ha il qualcosa di simile alla seguente.

local@usr> a=1
local@usr> echo $a
1
local@usr> echo $!a
a

Si sta stampando la variabile di nuovo. E 'tutto per questo? Quali sono le altre opzioni di $ x che abbiamo? Pochi so essere $$, $ *, $ ?. Se qualcuno mi può puntare a una buona fonte, sarà utile. BTW, Questo è in Sun OS 5.8, KSH.

È stato utile?

Soluzione

Le diverse variabili $… sono descritte in Bash manuale . Secondo il manuale di $! si espande per il PID dell'ultimo processo avviato in background. Vedi:

$ echo "Foo"
Foo
$ echo $!

$ true&
[1] 67064
$ echo $!
67064
[1]+  Done                    true

In ksh sembra di fare lo stesso.

Altri suggerimenti

Dalla pagina man ksh sul mio sistema:

  ${!vname}
      Expands  to the name of the variable referred to by vname.  This
      will be vname except when vname is a name reference.

Per la shell si sta chiedendo, ksh, utilizzare il manuale ksh , e leggere questo:

  

Parametro Sostituzione
       Un parametro è un identificatore, una o più cifre, o una qualsiasi delle        i caratteri *, @, #,, -?!., $, e

E 'chiaro che queste sono le opzioni accettate $ *, $ @, $ #, $ ?, $ -, $$ e $ !.
Più potrebbero essere inclusi in futuro.


Per il parametro $ !, dal manuale:

  

"!" Il numero di processo dell'ultimo comando sfondo invocato.

se si avvia un processo in background, come sleep 60 &, allora ci sarà un numero di processo per tale processo, e il parametro $! stamperà il suo numero.

$ sleep 60 &
[1] 12329
$ echo "$!"
12329

Se non v'è alcun processo in background in esecuzione (come quando il guscio viene avviato), l'exansion è vuoto. Ha un valore nullo.

$ ksh -c 'echo $!'

Se c'è un processo in background, si espanderà al PID di tale processo:

$  ksh -c 'sleep 30 & echo $!'
42586

Questo è il motivo echo $!a espansa a a. E 'perché non c'è PID segnalare:

$  ksh -c 'echo $!a'
a

Altri gusci possono avere un diverso (di solito piuttosto simile) elenco delle espansioni (un parametro con un solo $ e uno carattere successivo).
Ad esempio, bash riconosce questa *@#?-$!0_ come "parametri speciali". Cerca il manuale di Bash per la rubrica "Parametri 3.4.2 speciali".

  

Parametri speciali
         La shell tratta diversi parametri appositamente.

Si dà l'ID di processo dello scorso backgroundjob o di una funzione di sfondo Si prega di passare attraverso questo link qui sotto

http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html#specvar

! è un operatore di riferimento nel unix, anche se non è chiamato con tale nome.

Si riferisce sempre ad un processo madre. Prova a digitare:! in vi, che vi porta al prompt dei comandi e si può eseguire comandi come al solito fino comando exit.

! in SQLPLUS esegue anche il comando dal prompt dei comandi. provare questo in sqlplus

SQL>! Ls --- questo dà l'elenco dei file inthe directory corrente.

$! -. Dà, ovviamente, l'ID del processo della corrente ultimo processo /

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top