почему это не работает?
ls -l ${which cal}
Я предполагаю, что $ {} выполняет внутри него команду и помещает ее в переменную, которую затем может использовать предыдущая команда. Пытаясь выучить мелочи bash
вы ищете подстановка команд
ls -l $(which cal)