当bash解释脚本并遇到
时${arg?error message}
当取消设置arg时,脚本在打印错误消息后终止。不幸的是,bash在错误消息中加上“$ 0:line $ LINENO:arg:”。是否可以取消附加信息?我希望错误消息完全是“错误消息”。
答案 0 :(得分:2)
您可能必须避免使用${PARAMETER?WORD}
构造并手动执行此操作。例如,像
if [ -z "${arg+set}" ]; then
printf 'error message\n' >&2
exit 2
fi
答案 1 :(得分:0)
我猜想如果你想要这样做,你可能无法以Bash中最自然的方式实现你的最终目的。这样的事情会更好:
if [ -z $arg ]; then
echo error message >&2;
else
$arg
fi
更直接地回答这个问题:
(${arg?error message}) |& sed "s/.*: .*: //"
说明:|&
将括号中的代码块的标准错误(顺便说一下,这是必要的)连接到sed
(流编辑器),它会剥离使用正则表达式不需要的消息部分。