Прочитайте дружественное руководство вашей оболочки:
man sh
В оболочке «двойные кавычки» вокруг текста допускают интерпретацию переменных внутри, в то время как «одинарные кавычки» - нет, соглашение, принятое более поздними языками, такими как Perl и PHP (но не, например, JavaScript).
sed 's#/dir#$dir#g' *
Чтобы выполнить замену в скриптах, сделайте что-то вроде
find * -maxdepth 0 -type f | while read f; do mv $f $f.old && sed 's#/dir#$dir#' $f.old > $f; done
или просто
perl -pi.old -e 's#/dir#\$dir#' * # Perl also interpolates variables in s commands