Dans les scripts shell UNIX: Qu'est-ce que $! étendre à?
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.
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