Попытка динамически построить скрипт с использованием строковой интерполяции - всегда fr agile. Вы должны передать имя приложения как аргумент в AppleScript, чтобы вам не приходилось беспокоиться об экранировании каких-либо символов через два уровня интерпретаторов.
APPNAME=$1 # The name should be passed as a single argument.
if pgrep -x "$APPNAME" > /dev/null # checking if app is open
then
echo "Closing..."
osascript -e 'on run argv' -e 'quit app (item 1 of argv)' -e 'end run' "$APPNAME"
else
echo "*** The app is not open"
fi
Не важно значение APPNAME
означает, что вы выполняете точно такой же сценарий; единственное отличие - это аргумент, который получает скрипт.