Вы получаете выход из grepна grep 'MY_VAR' $bash_profile 2>&1. grep выводит согласованную строку в вашем профиле:
export MY_VAR=foo
по стандарту. В 2>&1только вперед стандартный вывод на стандартный вывод. Хорошо использовать -qопцию с grep. Также подоболочка (...)вокруг grep не нужна. Попробуй это:
#!/bin/bash
set_bash_profile()
{
local bash_profile="$HOME/.profile"
if [ -w $bash_profile ]; then
if grep -q 'MY_VAR' $bash_profile; then
sed -i '/MY_VAR/d' $bash_profile
fi
echo "export MY_VAR=foo" >>$bash_profile
fi
}
set_bash_profile