Простите, но где нестыковка? Вот цитата из книги "ПРОГРАММИРОВАНИЕ НА shell (UNIX) (Учебное пособие)" А. Соловьева:
Сам интерпретатор shell автоматически присваивает значения
следующим переменным (параметрам):
? - значение, возвращенное последней командой;
$ - номер процесса;
! - номер фонового процесса;
# - число позиционных параметров, передаваемых в shell;
* - перечень параметров, как одна строка;
@ - перечень параметров, как совокупность слов;
- - флаги, передаваемые в shell.
При обращении к этим переменным (т.е при использовании их в
командном файле - shell-программе) следует впереди ставить "$".
Пример. Вызов расчета
specific par1 par2 par3
имеющего вид
###
# specific: Специальные параметры (переменные)
echo $0 - имя расчета
echo $? - код завершения
echo $$ - идентификатор последнего процесса
echo $! - идентификатор последнего фонового процесса
echo
echo $* - значения параметров, как строки
echo $@ - значения параметров, как слов
echo
set -au
echo $- - режимы работы интерпретатора
Нестыковка в том, что в bash первый знак доллара -- это префикс, обозначающий переменную (как в perl). Без этого префикса bash считает что имеет дело с литералом. Соответственно "echo $" выводит просто знак доллара.
Ну и в том, что я здесь (каюсь) автоматом расширил знание о bash на знание о shell-ах вообще. Так делать нельзя и стыдно. (матерясь, ушел читать про POSIX shell)