$! определенно является частью ksh и ksh93.
echo $SHELL
покажет вам, какую оболочку вы используете.
Пример разумного использования &
#!/bin/ksh
nohup ./myscript.sh argument1 2>&1> mylogfile &
# do some other task
cnt=0
while [ $cnt -le 100 ]
do
# work on another task here
cnt=$(( $cnt + 1 ))
done
wait
Оператор wait делает паузу для все еще работающего дочернего процесса. Обычно вы не помещаете процесс в фоновый режим, не ожидаете, что он будет выполняться вечно, а затем полностью забудете его.
Если вы хотите полностью отсоединенный процесс, который выполняется вечно, рассмотрите демон. Некоторые люди пишут демонов в оболочке - не лучшая практика - но это сделано. Обычно демоны UNIX пишутся на C.
Глава 13 Стивенса «Расширенное программирование в среде UNIx» 2ed посвящена демонам.