Я предполагаю, что если вы хотите сделать это, вы, возможно, не достигнете своей конечной цели способом, наиболее естественным в Bash. Примерно так должно быть лучше:
if [ -z $arg ]; then
echo error message >&2;
else
$arg
fi
Отвечая на вопрос более прямо, хотя:
(${arg?error message}) |& sed "s/.*: .*: //"
Объяснение: |&
соединяет стандартную ошибку блока кода в скобках (кстати, это необходимо для работы) в sed
(редактор потоков), который удаляет часть сообщение, которое вы не хотите с регулярным выражением.