Question

Quelle est la signification pour $! décortiqués script shell? Je suis en train de comprendre un script qui a quelque chose comme ce qui suit.

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

Il est l'impression de retour de la variable. Est-il tout cela? Quelles sont les autres options $ x nous avons? Peu que je connais sont $$, $ *, $ ?. Si quelqu'un peut me pointer vers une bonne source, il sera utile. BTW, c'est à Sun OS 5.8, KSH.

Était-ce utile?

La solution

Les différentes variables de $… sont décrites dans Bash manuel . Selon le manuel $! au PID étend du dernier processus lancé en arrière-plan. Voir:

$ echo "Foo"
Foo
$ echo $!

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

En ksh il semble faire la même chose.

Autres conseils

A partir de la page de manuel ksh sur mon système:

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

Pour le shell que vous demandez, ksh, utilisez le manuel ksh et lire ceci:

  

Remplacement des paramètres
       Un paramètre est un identificateur, un ou plusieurs chiffres, ou l'un de        les caractères *, @, #, -?!., $ et

Il est clair que ce sont les options acceptées $ *, $ @, $ #, $ ?, $ -, $$ et $ !.
Plus pourrait être inclus dans l'avenir.


Pour le paramètre $ !, du manuel:

  

"!" Le nombre de processus de la dernière commande de fond invoqué.

si vous commencez un processus d'arrière-plan, comme sleep 60 &, alors il y aura un certain nombre de processus pour un tel processus, et le paramètre $! imprimera son numéro.

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

Si aucun processus d'arrière-plan dans l'exécution (comme lorsque la coquille commence), le exansion est vide. Il a une valeur nulle.

$ ksh -c 'echo $!'

S'il y a un processus d'arrière-plan, il élargira le PID de ce processus:

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

C'est pourquoi echo $!a étendu à a. Il est parce qu'il n'y a pas de PID à signaler:

$  ksh -c 'echo $!a'
a

D'autres coquilles peuvent avoir un autre (généralement assez similaire) liste des extensions (un paramètre avec un seul $ et un caractère suivant).
Par exemple, bash reconnaître ce *@#?-$!0_ comme « paramètres spéciaux ». Recherche manuel Bash pour la rubrique « 3.4.2 Paramètres spéciaux ».

  

Paramètres spéciaux
         La coquille traite spécialement plusieurs paramètres.

Il donne l'identifiant du processus de dernière backgroundjob ou la fonction d'arrière-plan S'il vous plaît passer par ce lien ci-dessous

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

! est un opérateur de référence dans unix, bien qu'il ne soit pas appelé avec ce nom.

Il se réfère toujours à un processus de mère. Essayez de taper: en vi, il vous faut pour commander rapidement et vous pouvez exécuter des commandes, comme d'habitude jusqu'à ce que la commande de sortie.

! dans SQLPLUS également la commande exécute à partir de l'invite de commande. essayez ceci dans sqlplus

SQL>! Ls --- cela donne la liste des fichiers INTHE répertoire courant.

$! -. Donne évidemment le numéro de processus du dernier courant / processus

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top