Когда я использую эти команды оболочки:
[root@linux /tmp]# a=$$
[root@linux /tmp]# echo $a
3985
откуда взялось значение 3985? И почему?
man bash
объясняет это.
Expands to the process ID of the shell. In a () subshell,
it expands to the process ID of the current shell, not the subshell.
$$ - идентификатор текущего процесса
пытаться
host@controller:~$ echo $$ 12481 host@controller:~$ ps -p 12481 PID TTY TIME CMD 12481 pts/2 00:00:01 bash host@controller:~$
Поскольку мы выполняем echo $$
в bash мы получаем текущий pid
знаю также
эхо $? - это код возврата последней выполненной команды.
$ # - количество аргументов
$ * - это список аргументов, переданных текущему процессу
$ [1 или 2 или ... n] значение каждого соответствующего аргумента
Вот почему некоторые люди используют его для создания имени файла, которое используется только временно, а затем уничтожается, как в этом фрагменте скрипта.
SCRATCHFILE=/tmp/emphemeral.$$ ;
# Now have the script write to and read from the temp file
rm $SCRATCHFILE ;
Как упоминалось выше, $$ в имени файла будет PID основного скрипта.
Попробуйте "echo $$" и получите ответ.